Dashcode List - OnClick - PullRequest
       6

Dashcode List - OnClick

1 голос
/ 09 июля 2009

Я создал проект в 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 Ответ

3 голосов
/ 09 июля 2009

Это должно работать:

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 см. В следующих двух статьях:

...