سؤال

لقد قمت بإنشاء مشروع في 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 الكلمة الرئيسية:

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top