1

Dashcode でプロジェクトを作成し、リスト コントロールを挿入し、動的リストを有効にし、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」オブジェクトを見つけることができないようです。

4

1 に答える 1

3

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

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イベントハンドラー内で、オブジェクトではなくthisDOM要素を参照していることです。この問題を修正するには、オブジェクトを指す変数(名前を付けましたが、好きなように呼び出すことができます)を作成し、イベントハンドラー内のオブジェクトにアクセスするときはいつでもこの変数を使用します。rowElementstations_thisstationsstations

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

于 2009-07-09T06:03:39.763 に答える