我正在尝试清理一些旧代码,它目前使用ScriptManager设置的变量在Javascript代码中显示/隐藏部分页面。
变量目前仅为_showNameDiv
等。
我想将这些全部放在一个共同的命名空间上,以使事情变得更加清晰,例如MyCompany.Toggles.ShowNameDiv
。
我尝试创建命名空间
var MyCompany = {
Toggles: {}
}
在后面的代码中执行此操作:
JavaScriptRegistrar javaScriptRegistrar = GetJavaScriptRegistrar();
javaScriptRegistrar.Register("MyCompany.Toggles.ShowNameDiv", true);
但我只对该变量得到'undefined'
。 (GetJavaScriptRegistrar是ScriptManager的包装器。)
有没有办法做我想做的事情? 我是以错误的方式来做这件事的吗? 是否有更好的替代方案可以获得同样的好处?
请记住这是旧代码,我无法重写整个页面。我试图做一个渐进的步骤,我可以用它作为一个例子,我可以向我的同事展示。
答案 0 :(得分:1)
如果不知道这些代码到底做了什么(特别是JavascriptRegistrar),很难弄清楚可能出现什么问题。
一个可能的问题可能是您声明的javascript“命名空间”的范围。
通过使用“var”关键字,您不会将命名空间设置为全局,而是仅在其定义的闭包中定义。
我想JavascriptRegistrar类注册的javascript代码需要一个全局变量,但没有找到,所以返回undefined
。
这里有一段代码可以“暴露”你的变量:
(function(window, undefined) {
var myCompany = {
Toggles: {}
};
window.MyCompany = myCompany;
})(window);