我在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”对象。
答案 0 :(得分: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
关键字的详细信息,请参阅以下两篇文章: