Lista Dashcode - OnClick
-
12-09-2019 - |
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".
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
: