2013-01-31 70 views
1

我正在尝试创建和初始化某种主视图模型,该模型包含可能在页面加载时附加的每个页面和页面特定模型上运行的常见视图模型。设置并初始化多个挖空视图模型

var MasterViewModel = { 
    commonViewModel1 : CommonViewModel1(), 
    commonViewModel2 : CommonViewModel1() 
}; 

var commonInit = function() { 
    // Populate View Model Data 
    MasterViewModel.commonViewModel1 = initCommonViewModel1(); 
    MasterViewModel.commonViewModel2 = initCommonViewModel2(); 

    // Apply common view model bindings 
    ko.applyBindings(MasterViewModel); 
}; 

var pageSpecificInit = function() { 
    // Populate Specific View Model Data 
    MasterViewModel.pageViewModel1 = initPageViewModel1(); 
    MasterViewModel.pageViewModel2 = initPageViewModel2(); 

// Apply Page Specific Bindings 
ko.applyBindings(MasterViewModel); 
}; 

$(function() { 
    commonInit(); 
    pageSpecificInit(); 
}); 

这是什么,我想这样只有页面特定代码运行在实际应用中,这是所有的命名空间,并在不同的文件做了最原始的例子。什么是这样做的最佳实践我有点基于上述对http://www.knockmeout.net/2012/05/quick-tip-skip-binding.html但是当我在应用程序中做,我得到的东西,如“不能绑定到pageViewModel1未定义”应该设置我的MasterViewModel不同更像

var MasterViewModel = { 
    commonViewModel1 : CommonViewModel1(), 
    commonViewModel2 : CommonViewModel1(), 
    pageViewModels : {} 
}; 

    var commonInit = function() { 
    // Populate View Model Data 
    MasterViewModel.commonViewModel1 = initCommonViewModel1(); 
    MasterViewModel.commonViewModel2 = initCommonViewModel2(); 

    // Apply common view model bindings 
    ko.applyBindings(MasterViewModel); 
}; 

var pageSpecificInit = function() { 
    // Populate Specific View Model Data 
    MasterViewModel.pageViewModels.pageViewModel1 = initPageViewModel1(); 
    MasterViewModel.pageViewModels.pageViewModel2 = initPageViewModel2(); 

// Apply Page Specific Bindings 
ko.applyBindings(MasterViewModel.pageViewModels); 
}; 

$(function() { 
    commonInit(); 
    pageSpecificInit(); 
}); 

回答

1

你的第二个例子更正确,但是不应该将页面特定的视图模型绑定到你用停止绑定注释包围的特定html元素吗?

ko.applyBindings(MasterViewModel.pageViewModels, $('#pageElement')[0]); 

但是,如果你想有很好的分离对象,可以互相交谈,那么你可能想看看Knockout Postbox

+0

好那么我仅限于某些绑定页面的某些部分是是可能的,我想在foreach中做一些事情为pageViewModel2.items我想点击一个按钮,如$ root.commonViewModel1.updateCustomerTotal。我没有看到停止和开始绑定到处的情况。 – BillPull

+0

我必须承认,我正在努力完全设想你在这里之后,但我已经用一些进一步的信息更新了我的答案。 –

+0

抱歉,我是新来淘汰赛,所以我说的是有点奇怪。我想我只是试图在页面上绑定多个视图模型而没有在初始化时引用DOM元素 – BillPull