مايكروسوفت أجاكس:غير قادر على الحصول على الخاصية 'x' ذات مرجع غير محدد أو فارغ

StackOverflow https://stackoverflow.com//questions/12649044

سؤال

كيف يمكنني استكشاف الخطأ التالي وإصلاحه بواسطة طريقة إطار عمل Microsoft AJAX JavaScript؟وهو عبارة عن سطر JavaScript يتم إنشاؤه تلقائيًا من عنصر تحكم المستخدم المخصص في تطبيق نماذج الويب (Sitefinity 5 CMS)

رسالة خطأ:

غير قادر على الحصول على الخاصية 'FancyBlockDesigner' ذات مرجع غير محدد أو فارغ

هنا هو جافا سكريبت الذي يلقي الخطأ:

Sys.Application.add_init(function() {
    $create(SitefinityWebApp.Esd.TheLab.SampleHtmlEditor.FancyBlockDesigner, null, null, {"Editor":"propertyEditor_ctl00_ctl00_ctl00_ctl00_ctl00_Editor","propertyEditor":"propertyEditor"}, $get("propertyEditor_ctl00_ctl00_ctl00"));
});

بدلاً من مناقشة ملفات ascx وcs التي تحاول تجريد هذه التفاصيل مني، أريد أن أعرف ماذا يعني هذا الخطأ.إذا فهمت التفاصيل، قد يكون التجريد أكثر منطقية.

هل كانت مفيدة؟

المحلول

تقوم وظيفة "$create" في ASP.NET Ajax بإنشاء مثيل لفئة JavaScript.كان لدى Microsoft رأيها الخاص حول كيفية جعل JavaScript موجهًا نحو الكائنات، وكما أظهر الوقت، لم يكن أسلوبهم مثاليًا تمامًا.

على أية حال، لمحاولة شرح ما يحدث، اسمحوا لي أن أقدم لمحة بسيطة عن كيفية عمل ذلك.نبدأ بالتحكم من جانب الخادم والذي يتم تنفيذه IScriptControl الواجهة التي تتطلب عضوين:GetScriptDescriptors وGetScriptReferences.أما الخيار الثاني فهو واضح ومباشر للغاية - فهو يتيح لك تسجيل المراجع لجميع ملفات JavaScript التي تتحكم في الحاجة إليها.من ناحية أخرى، يتيح لك GetScriptDescriptors تحديد جميع مثيلات فئات JavaScript التي تريد استخدامها، كما يتيح لك تعيين خصائصها - وتهيئتها، إذا أردت ذلك.

ما يقوله كود JavaScript الذي تم إنشاؤه تلقائيًا والذي قمت بلصقه هو في الأساس أنك حددت في GetScriptDescriptors أنك ستحتاج إلى مثيل من النوع "SitefinityWebApp.Esd.TheLab.SampleHtmlEditor.FancyBlockDesigner" حيث تريد تهيئة خاصية المحرر.سيذهب هذا الكود ويبحث عن مُنشئ JavaScript الذي يبدو كما يلي:

function SitefinityWebApp.Esd.TheLab.SampleHtmlEditor.FancyBlockDesigner(element) {

}

والذي على الأرجح يحتوي أيضًا على نموذج أولي محدد، مثل:

SitefinityWebApp.Esd.TheLab.SampleHtmlEditor.FancyBlockDesigner.prototype = {

}

الآن، منذ الخطأ الذي نشرته ينص على ما يلي:"تعذر الحصول على الخاصية 'FancyBlockDesigner' ذات مرجع غير محدد أو فارغ"، على الأرجح أن المشكلة هي إحدى المشكلات التالية:

  • لم تقم بتضمين ملف JavaScript الذي يحتوي على الفئة (المنشئ + النموذج الأولي) التي تحدثت عنها أعلاه
  • لقد نسيت إضافة "FancyBlockDesigner" إلى المُنشئ (يبدو أن لديك كائنًا آخر، ربما من خلال مساحات أسماء MS Ajax - "SitefinityWebApp.Esd.TheLab"
  • لم تقم بتسجيل مساحة الاسم "SampleHtmlEditor".تأكد من وجود هذا في الجزء العلوي من ملف JS الخاص بك: Type.registerNamespace("SitefinityWebApp.Esd.TheLab.SampleHtmlEditor");

لذا، قصة قصيرة طويلة، لا يمكن العثور على الوظيفة التي تحمل الاسم "SitefinityWebApp.Esd.TheLab.SampleHtmlEditor.FancyBlockDesigner".

أتمنى أن يساعد هذا ، إيفان

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