Вопрос

Я создал проект в 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, но я хотел бы отобразить фактическое значение по этому индексу.

К сожалению, это (например) «this._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