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 ».

Était-ce utile?

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:

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top