Dashcode列表 - OnClick

时间:2009-07-09 05:48:12

标签: javascript dashcode

我在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”对象。

1 个答案:

答案 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关键字的详细信息,请参阅以下两篇文章: