قائمة DashCode - OnClick
-
12-09-2019 - |
سؤال
لقد قمت بإنشاء مشروع في Dashcode، وإدخال عنصر تحكم قائمة، مما يدعم قائمة ديناميكية، أنشأ كائن JSON ويرتبط به مع عنصر التحكم. الرمز يشبه هذا ...
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); };
}
كما ترون عندما يتم تحديد عنصر، سيقوم بطباعة ROWINDEX، ولكن أود عرض القيمة الفعلية في هذا الفهرس.
لسوء الحظ، هذا (على سبيل المثال) "this._rowdata [2] لا يعمل، لا يبدو أنه قادر على العثور على كائن "_rowdata".
المحلول
هذا يجب أن يعمل:
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]); };
}
المشكلة هي أنه داخل rowElement.onclick
معالج الأحداث، this
يشير إلى عنصر دوم rowElement
, وليس لديك stations
هدف. نحن إصلاح المشكلة عن طريق إنشاء متغير (لقد سميت عليه _this
, ، ولكن يمكنك الاتصال به ما تريد) التي تشير إلى stations
كائن ثم استخدام هذا المتغير كلما أردنا الوصول إلى stations
كائن داخل معالج الأحداث.
انظر المقالتين التاليين لمزيد من المعلومات حول this
الكلمة الرئيسية: