0

我有一个包含几行脚本的容器页面,其中包含以下行:

var connection = $.connection.hub.start();

而且我的容器页面中有多个部分动态加载。如何connection在动态加载的局部视图中使用该变量。例如:

connection
    .pipe(init)
    .done(function () {
        console.log("hey");
    });

我的动态加载视图中的上述代码段说:

Uncaught ReferenceError: connection is not defined

提前致谢,

4

1 回答 1

1

正因为如此,我们帮助理解,如果你定义 store 它window.connection就是在 javacript 中隐式创建 window 对象的成员变量。

Javascript 允许您“即时”创建函数和成员变量,这很强大,但很容易被滥用。我个人尝试创建一些由全局命名空间中声明的目的分隔的全局对象。

您可以通过以下方式执行相同操作(如果您使用 jquery):

$().ready(function() {
   var g_someGlobalState = true;
   var g_someGlobalCounter = 0;
   // etc.
});

我认为这通常是不好的做法,因为这些声明对于所有 javascript 库都是全局的,并且您可能会遇到命名冲突。通常最好将自定义命名空间应用于您的代码,以确保不会发生冲突。

我使用从以下位置获得的 jquery 中的辅助命名空间函数来执行此操作: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

于 2013-05-07T14:34:58.183 回答