質問

ダッシュコードでプロジェクトを作成し、リスト コントロールを挿入し、動的リストを有効にし、JSON オブジェクトを作成してコントロールに関連付けました。コードは次のようになります...

var stations = {

    _rowData: ["Mitchelton", "Gaythorne", "Albion", "Central", 
    "Burpengary", "Petrie", "Morayfield", "Caboolture", "Ferny Grove"],

    numberOfRows: function() { return this._rowData.length; },

    prepareRow: function(rowElement, rowIndex, templateElements) {
        if (templateElements.label) {
            templateElements.label.innerText = this._rowData[rowIndex];
        }
        rowElement.onclick = function(event) { alert("Row "+rowIndex); };
    }

ご覧のとおり、項目が選択されると rowIndex が出力されますが、そのインデックスの実際の値を表示したいと思います。

残念ながら、これ(たとえば)「this._rowData[2]」は機能しません。「_rowData」オブジェクトを見つけることができないようです。

役に立ちましたか?

解決

これは機能するはずです:

prepareRow: function(rowElement, rowIndex, templateElements) {
    if (templateElements.label) {
        templateElements.label.innerText = this._rowData[rowIndex];
    }

    var _this = this;
    rowElement.onclick = function(event) { alert(_this._rowData[2]); };
}

問題は、 rowElement.onclick イベントハンドラ、 this DOM要素を指します rowElement, 、 あなたのことではありません stations 物体。変数を作成することで問題を解決します (変数に名前を付けました) _this, 、ただし、任意に呼び出すことができます)。 stations オブジェクトにアクセスし、アクセスしたいときはいつでもこの変数を使用します。 stations イベントハンドラー内のオブジェクト。

詳細については、次の 2 つの記事を参照してください。 this キーワード:

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top