Pergunta

Eu criei um projeto em Dashcode, inserido um controle List, permitiu uma lista dinâmica, criou um objeto JSON e associá-lo com o controle. Os olhares código como este ...

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); };
    }

Como você pode ver quando um item é selecionado ele imprimirá o rowIndex, mas eu gostaria de exibir o valor real nesse índice.

Infelizmente, isso (por exemplo) "this._rowData [2]" não funciona, ele não parece ser capaz de encontrar o objeto "_rowData".

Foi útil?

Solução

Isso deve funcionar:

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]); };
}

O problema é que dentro do manipulador de eventos rowElement.onclick, this refere-se ao elemento DOM rowElement, não o seu objeto stations. Nós corrigir o problema através da criação de uma variável (Eu nomeei-o _this, mas você pode chamar do que quiser) que aponta para o objeto stations e em seguida, usando esta variável sempre que quiser acessar o objeto stations dentro do manipulador de eventos.

Veja os seguintes dois artigos para obter mais informações sobre a palavra-chave this:

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top