2012-09-29 62 views
1

如何解決Microsoft AJAX JavaScript框架方法拋出的以下錯誤?它是JavaScript代碼從在Web的自定義用戶控制的自動生成的線形成應用(Sitefinity 5 CMS)Microsoft AJAX:無法獲取屬性'x'的未定義或空引用

錯誤消息:

Unable to get property 'FancyBlockDesigner' of undefined or null reference

這裏是引發錯誤的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文件,我想知道這個錯誤的含義。如果我瞭解細節,抽象可能會更有意義。

回答

1

ASP.NET中的「$ create」函數Ajax創建一個JavaScript類的實例。微軟對如何使JavaScript面向對象發表了自己的看法,並且隨着時間的推移,他們的方法並不完美。無論如何,爲了解釋發生了什麼,讓我簡單介紹一下它的工作原理。我們從一個服務器端控件開始,它實現IScriptControl接口,該接口強制兩個成員:GetScriptDescriptors和GetScriptReferences。第二個非常簡單 - 它允許您註冊對您控制的所有JavaScript文件的引用。另一方面,GetScriptDescriptors允許您定義要使用的所有JavaScript類的實例,並且您可以設置它們的屬性 - 如果您願意,可以對它們進行初始化。

你粘貼的自動生成的JavaScript代碼說的基本上是你已經在GetScriptDescriptors中定義了你需要一個類型爲「SitefinityWebApp.Esd.TheLab.SampleHtmlEditor.FancyBlockDesigner」的實例,你希望Editor屬性被初始化。此代碼會去尋找一個JavaScript構造,看起來像這樣:

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

} 

最有可能也有一個原型定義的,是這樣的:現在

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

} 

,因爲錯誤您已發佈狀態:下面的「無法獲取屬性未定義或空引用‘FancyBlockDesigner’」,最有可能是一個問題:

  • 您還沒有包括其中包含了CLA的JavaScript文件我已經談到了以上的
  • 你忘了將「FancyBlockDesigner」添加到構造函數中(似乎你確實有其他對象,可能是通過MS Ajax命名空間 - 「SitefinityWebApp.Esd.TheLab 「
  • 您尚未註冊」SampleHtmlEditor「命名空間。確保你的JS文件的頂部你有這樣的:Type.registerNamespace("SitefinityWebApp.Esd.TheLab.SampleHtmlEditor");

所以,短篇小說長,名稱爲「SitefinityWebApp.Esd.TheLab.SampleHtmlEditor.FancyBlockDesigner」的功能不能被發現。

希望這會有所幫助, Ivan Ivan

相關問題