我们在这两种方式上都取得了成功,但通常我们会使用您提到的第一个场景,其中一个整体父视图模型包含其他更具体的视图模型的实例。一般做法建议避免applyBindings
频繁打电话。在您的实例中快速提及淘汰赛的“with”绑定似乎是合适的:http: //knockoutjs.com/documentation/with-binding.html
这将使您的选项卡中的绑定表达式更加专注于它们所代表的视图模型:
<script type="text/javascript">
var ParentViewModel = function(){
this.tabOneViewModel = new TabOneViewModel();
this.tabTwoViewModel = new TabTwoViewModel();
}
var TabOneViewModel = function(){
this.tabOneTitle = 'Tab One';
}
var TabTwoViewModel = function(){
this.tabTwoTitle = 'Tab Two';
}
$(function(){
var parentViewModel = new ParentViewModel();
ko.applyBindings(parentViewModel,$('#main')[0]);
});
</script>
<body>
<div id="main">
<div data-bind="with:tabOneViewModel">
<div data-bind="text:tabOneTitle"></div>
</div>
<div data-bind="with:tabTwoViewModel">
<div data-bind="text:tabTwoTitle"></div>
</div>
</div>
</body>
最终,如何构建 dom 和视图模型完全取决于您自己,只需列出一个我们发现有用的常见示例。