Javascript Dashcode列表-OnClick

Javascript Dashcode列表-OnClick,javascript,dashcode,Javascript,Dashcode,我已经在Dashcode中创建了一个项目,插入了一个列表控件,启用了一个动态列表,创建了一个JSON对象并将其与该控件关联。代码看起来像这样 var stations = { _rowData: ["Mitchelton", "Gaythorne", "Albion", "Central", "Burpengary", "Petrie", "Morayfield", "Caboolture", "Ferny Grove"], numberOfRows: functi

我已经在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); };
    }
正如您所看到的,当选择一个项目时,它将打印行索引,但我想显示该索引的实际值

不幸的是,这个(例如)“this.\u rowData[2]”不起作用,它似乎无法找到“\u 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
事件处理程序中,
引用的是DOM元素
rowElement
,而不是
站点
对象。我们通过创建一个指向
stations
对象的变量(我将其命名为
\u this
,但您可以随意调用它)来解决这个问题,然后每当我们想要访问事件处理程序中的
stations
对象时,就使用这个变量

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


sweet,非常感谢:)这解释了我之前看到的一些代码(在谷歌搜索这个问题的答案时),有人在其中放了“var self=This”。。。我以为他们疯了,但现在我明白他们在干什么了:)是的!如果你看一下AppleClasses,你会注意到它们在这样的情况下也会创建一个变量“self”……顺便说一句,你实际上不是在创建JSON对象,而是在创建一个普通的JavaScript对象。JSON恰好使用JavaScript对象表示法作为其语法(因此得名为:“JavaScriptObjectNotation”)。不用担心:)看,我们每天都会学到一些新东西:)