簡體   English   中英

Microsoft AJAX:無法獲取未定義或空引用的屬性“ x”

[英]Microsoft AJAX: Unable to get property 'x' of undefined or null reference

如何解決Microsoft AJAX JavaScript框架方法引發的以下錯誤? 它是從Web窗體應用程序(Sitefinity 5 CMS)中的自定義用戶控件自動生成的JavaScript行。

錯誤信息:

無法獲取未定義或空引用的屬性“ FancyBlockDesigner”

這是引發錯誤的JavaScript:

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文件,而是想知道此錯誤的含義。 如果我了解細節,那么抽象可能更有意義。

ASP.NET Ajax中的“ $ create”函數創建JavaScript類的實例。 微軟對於如何使JavaScript面向對象有自己的見解,而且正如時間所證明的那樣,他們的方法並不十分完美。

無論如何,要嘗試解釋正在發生的事情,讓我概述一下它的工作原理。 我們從服務器端控件開始,該控件實現IScriptControl接口,該接口要求兩個成員:GetScriptDescriptors和GetScriptReferences。 第二個非常簡單-它使您可以注冊對您需要控制的所有JavaScript文件的引用。 另一方面,讓我們定義要使用的JavaScript類的所有實例,並讓您設置它們的屬性-如果需要的話,可以初始化它們。

您粘貼的自動生成的JavaScript代碼基本上是在GetScriptDescriptors中定義的,您將需要一個類型為“ SitefinityWebApp.Esd.TheLab.SampleHtmlEditor.FancyBlockDesigner”的實例,在該實例中要初始化Editor屬性。 這段代碼將查找如下所示的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 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM