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

È stato utile?

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:

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top