Список дашкодов — OnClick
-
12-09-2019 - |
Вопрос
Я создал проект в 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
ключевое слово: