2009-07-09 7 views
1

Dashcodeでプロジェクトを作成し、Listコントロールを挿入し、動的リストを有効にし、JSONオブジェクトを作成してコントロールに関連付けました。コードは、アイテムは、それがrowIndexプロパティを表示します選択されたときにあなたが見ることができるようにDashcode List - OnClick

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); }; 
    } 

...このように見えますが、私はそのインデックスの実際の値を表示したいと思います。

残念ながら、 "this._rowData [2]"はうまくいきませんが、 "_rowData"オブジェクトを見つけることができないようです。

+0

を通常のJavaScriptオブジェクトを作成しています。 JSONの構文では、JavaScriptオブジェクト表記が使用されています(したがって、名前は "JavaScriptObjectNotation"です)。 –

+0

心配はありません:)私たちは毎日何か新しいことを学びます:) – Nippysaurus

答えて

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イベントハンドラ内で、thisはDOM要素rowElement、ないあなたのstationsオブジェクトを参照していることです。この問題は、という名前の変数を作成して、stationsオブジェクトを指している変数を作成し、イベントハンドラ内のstationsオブジェクトにアクセスするときはいつでもこの変数を使用して問題を解決します。

thisキーワードの詳細については、以下の二つの記事を参照してください:あなたが実際に*のJSONオブジェクト* - あなたを作成していない、ところで

+0

甘い、ありがとうございました:)これはちょっと前に見たコードを説明しています(この問題の答えはグーグルです)。 "...彼らはナッツか何かが行ったと思ったが、今は彼らが何をしているかを見る:) – Nippysaurus

+0

はい! AppleClassesを見ると、このような状況で変数 "self"も作成されていることに気付くでしょう... –