Lista Dashcode - Su clic
-
12-09-2019 - |
Domanda
Ho creato un progetto in Dashcode, inserito un controllo Elenco, ha consentito un elenco dinamico, creato un oggetto JSON e associato con il controllo. Il codice simile a questo ...
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); };
}
Come si può vedere quando un elemento è selezionato verrà stampata la rowIndex, ma vorrei per visualizzare il valore reale a tale indice.
Purtroppo questo (per esempio) "this._rowData [2]" non funziona, non sembra essere in grado di trovare l'oggetto "_rowData".
Soluzione
Questo dovrebbe funzionare:
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]); };
}
Il problema è che all'interno del gestore di eventi rowElement.onclick
, this
si riferisce all'elemento DOM rowElement
, non l'oggetto stations
. Fissiamo il problema con la creazione di una variabile (che ho chiamato è _this
, ma si può chiamare come volete) che punta all'oggetto stations
e quindi utilizzando questa variabile ogni volta che vogliamo per accedere all'oggetto stations
all'interno del gestore di eventi.
Per ulteriori informazioni sulla parola chiave this
Vedere i seguenti due articoli: