1

我在 Dashcode 中创建了一个项目,插入了一个 List 控件,启用了一个动态列表,创建了一个 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事件处理程序中,this指的是 DOM 元素rowElement,而不是您的stations对象。我们通过创建一个指向该对象的变量(我已将其命名_this,但您可以随意调用它)来解决该问题stations,然后在我们想要访问stations事件处理程序中的对象时使用该变量。

this有关关键字的更多信息,请参阅以下两篇文章:

于 2009-07-09T06:03:39.763 回答