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.

War es hilfreich?

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:

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top