Dashcode Liste - Surclic
-
12-09-2019 - |
Question
Je l'ai créé un projet dans Dashcode, inséré un contrôle de liste, a permis une liste dynamique, a créé un objet JSON et associé avec le contrôle. Le code ressemble à ceci ...
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); };
}
Comme vous pouvez le voir quand un élément est sélectionné, il imprime le rowIndex, mais je voudrais afficher la valeur réelle à cet indice.
Malheureusement, cela (par exemple) « this._rowData [2] » ne fonctionne pas, il ne semble pas être en mesure de trouver l'objet « _rowData ».
La solution
Cela devrait fonctionner:
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]); };
}
Le problème est que dans le gestionnaire d'événements rowElement.onclick
, this
fait référence à l'élément DOM rowElement
, pas votre objet stations
. Nous fixons le problème en créant une variable (je l'ai nommé il _this
, mais vous pouvez l'appeler ce que vous voulez) qui pointe vers l'objet stations
puis en utilisant cette variable chaque fois que nous voulons accéder à l'objet stations
à l'intérieur du gestionnaire d'événements.
Voir les deux articles suivants pour plus d'informations sur le mot-clé this
: