Lista Dashcode - OnClick
-
12-09-2019 - |
Pregunta
He creado un proyecto en Dashcode, se inserta un control de lista, permitió una lista dinámica, creada con un objeto JSON y lo asocia con el control. El código es el siguiente ...
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 se puede ver cuando se selecciona un elemento que va a imprimir la rowIndex, pero me gustaría mostrar el valor real de ese índice.
Por desgracia, esta (por ejemplo) "this._rowData [2]" no funciona, no parece ser capaz de encontrar el objeto "_rowData".
Solución
Esto debería 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]); };
}
El problema es que dentro del controlador de eventos rowElement.onclick
, this
se refiere al elemento DOM rowElement
, no su objeto stations
. Arreglamos el problema mediante la creación de una variable (He nombrado que _this
, pero se le puede llamar lo que quieras) que apunta al objeto stations
y luego utilizar esta variable siempre que queramos acceder al objeto stations
dentro del controlador de eventos.
Vea los dos artículos siguientes para obtener más información sobre la palabra clave this
: