我已经创建了一个项目在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,但我想显示的实际价值在于,指数。

不幸的是,这种(例如)"这个。_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 目的内部事件的处理程序。

看到以下两个条款的更多信息 this 关键字:

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top