2012-09-29 29 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

相关问题