2012-02-09 51 views
6

我的應用程序視圖模型正在增長非常大。我如何正確地將它分解成文件和命名空間?我是否創建第二個名稱空間對象並將視圖模型作爲參數傳入?分裂knockoutjs

var BALL = {}; 
BALL.roll = function(avm) { // function code }; 
+3

這個答案可能會幫助你:http://stackoverflow.com/questions/8676988/example-of-knockoutjs-pattern-for-multi-view-applications。在Knockout中有三種使用多視圖模型的選項。 – 2012-02-09 14:07:16

回答

11

我個人的偏好是不是分手了我applyBindings電話,而是用一個單一的全局命名空間分公司工作過的這一點。

我的推理是,爲了使多個綁定正確工作而不是衝突,您需要非常小心,您選擇的目標dom元素不會發生更改。不幸的是,這個標記有一個隨時間變化的惡習,這會讓你稍後在viewModels中遇到麻煩。我已經在一個非常大的項目KO使用

我一般的做法是爲整個應用程序如myapp

  • 分手了單獨的功能塊到單獨的文件

    1. 一個全球頂級的命名空間。通常有自己獨特的命名空間。例如`myapp.navigation'
    2. 如果特別是某個命名空間太大,會將其拆分爲更多的子命名空間,或者如果這不合適,則將多個文件之間的命名空間分隔開。
    3. 將最後的所有文件拼湊起來以保持性能。

    我最近一直使用

    一些命名空間的代碼,以便在您的myapp.navigation文件,你將不得不

    Namespace("myapp.navigation", function() { 
        var self = this; // your myapp.navigation object 
    
        this.someFunction = function() { 
        }  
    }); 
    

    這僅僅是使用自調用函數來速記傳入一個手動構建的名稱空間。它給你一個私有的閉包,你可以在不同的js文件中自由地使用具有相同命名空間的多個命名空間調用。

    你applyBindings調用可以永遠

    ko.applyBindings(myapp); 
    

    希望這有助於。