Dashcode List - OnClick
-
12-09-2019 - |
Frage
ich ein Projekt in Dashcode erstellt haben, eingefügt, um eine List-Steuerelement, ermöglicht eine dynamische Liste, ein JSON-Objekt erstellt und mit der Steuerung verbunden. Der Code sieht wie folgt aus ...
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); };
}
Wie Sie sehen können, wenn ein Element ausgewählt wird, die rowIndex gedruckt wird, aber ich mag an diesem Index den aktuellen Wert anzuzeigen.
Leider ist dieser (zum Beispiel) „this._rowData [2]“ nicht funktioniert, ist es nicht in der Lage sein scheint, das „_rowData“ Objekt zu finden.
Lösung
Dies sollte funktionieren:
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]); };
}
Das Problem ist, dass innerhalb des rowElement.onclick
Ereignishandler this
zum rowElement
DOM-Elemente bezieht, nicht Ihr stations
Objekt. Wir beheben das Problem, indem eine Variable zu schaffen (ich genannt habe es _this
, aber man kann es nennen, wie Sie wollen), die dem stations
Objekt zeigt und dann mit dieser Variable, wenn wir das stations
Objekt innerhalb der Event-Handler zugreifen möchten.
Auch die folgenden zwei Artikel für weitere Informationen über das this
Stichwort: