2009-07-09 47 views
1

我已經創造了Dashcode中的一個項目,插入一個列表控制,啓用動態列表,創建了一個JSON對象,並與控制有關吧。該代碼看起來像這樣...的Dashcode列表 - 鼠標點擊

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」對象。

+0

順便說一句,你不是真正創建一個* * JSON對象你'創建一個普通的JavaScript對象。 JSON恰巧使用JavaScript對象表示法(因此名稱爲:「JavaScriptObjectNotation」)。 – 2009-07-09 06:21:51

+0

無後顧之憂:)看到了,我們每天學習新的東西:) – Nippysaurus 2009-07-09 06:32:59

回答

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對象。我們固定通過創建一個變量的問題(我把它命名爲_this,但你可以調用它任何你想要的)指向stations對象,然後使用這個變量,每當我們要訪問的事件處理程序內的stations對象。

見的this關鍵字的更多信息,以下兩篇文章: