2013-05-07 49 views
0

I所定義有腳本的包含以下行的幾行的容器頁面的JavaScript變量:使用在先前加載的DOM元素

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

我有多個部分在我的容器頁面動態加載。如何在動態加載的部分視圖中使用connection變量。例如:

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

在我的動態加載視圖上面的代碼塊說:

Uncaught ReferenceError: connection is not defined

由於提前,

+1

只要確保'var connection'處於需要使用它的代碼可訪問的變量範圍內。函數創建變量作用域。函數內部的代碼可以看到外部的變量,但外部代碼無法看到嵌套函數中聲明的變量。 – 2013-05-07 13:05:43

+0

...雖然我不知道「以前加載的DOM元素」是什麼意思。 – 2013-05-07 13:08:20

+0

我的意思是我正在加載一個頁面,之後我正在動態地更新它的某些部分。在第一個逗號'範圍'中提到的單詞之後,我搜索瞭如何在js中定義'全局變量',並發現我必須將其定義爲'window.connection'。謝謝。 – anilca 2013-05-07 13:41:31

回答

1

只是讓我們幫助理解,如果你定義店成window.connection隱式地在javacript中創建窗口對象的成員變量。

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