我有一个包含以下几行脚本的容器页面:
var connection = $.connection.hub.start();
我在容器页面中动态加载了多个部分。如何在动态加载的部分视图中使用connection
变量。例如:
connection
.pipe(init)
.done(function () {
console.log("hey");
});
我动态加载的视图中的上述代码段显示:
Uncaught ReferenceError: connection is not defined
提前致谢,
答案 0 :(得分:1)
正如我们帮助理解的那样,如果你将它存储到window.connection
中,它隐式地在javacript中创建了一个窗口对象的成员变量。
Javascript允许您“动态”创建功能和成员变量,这些功能强大但很容易被滥用。我个人尝试创建一些按全局命名空间中声明的目的分隔的全局对象。
您可以通过以下方式执行相同操作(如果使用jquery):
$().ready(function() {
var g_someGlobalState = true;
var g_someGlobalCounter = 0;
// etc.
});
我认为这通常是不好的做法,因为这些声明对所有javascript库都是全局的,并且您可能有命名冲突。通常最好将自定义命名空间应用于您的代码,以确保不会发生冲突。
我使用jquery中的helper命名空间函数执行此操作,我从以下位置获取: http://elegantcode.com/2011/01/26/basic-javascript-part-8-namespaces/
$().ready(function() {
function namespace(namespaceString) {
var parts = namespaceString.split('.'),
parent = window,
currentPart = '';
for (var i = 0, length = parts.length; i < length; i++) {
currentPart = parts[i];
parent[currentPart] = parent[currentPart] || {};
parent = parent[currentPart];
}
return parent;
}
// Declare global storage
var MyAppName_GlobalSettings = namespace('MyAppName.Settings');
// Assign variables
MyAppName_GlobalSettings.connection = $.connection.hub.start();
});
现在,在此javascript页面中,只要您想要访问此连接,就可以参考MyAppName_GlobalSettings.connection