2012-02-09 17 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); 
    

    希望这有助于。