iam无法在淘汰赛中应用绑定是这种正确的方法吗?

时间:2015-03-27 06:10:56

标签: knockout.js

我有两个视图模型,我想要applybindings一个视图modek是Div特定的,另一个是整页

var profileModel = {
first: ko.observable("Bob"),
last: ko.observable("Smith")
 };

var shellModel = {
header: ko.observable("Administration"),
sections: ["profile", "settings", "notifications"],
selectedSection: ko.observable()
};

 ko.applyBindings(shellModel);
 ko.applyBindings(profileModel, document.getElementById("profile"));

3 个答案:

答案 0 :(得分:1)

您好@Jairam可以创建一个具有两个视图模型和applybindings到object的对象:

 var profileModel = {
    first: ko.observable("Bob"),
    last: ko.observable("Smith")
     };

    var shellModel = {
    header: ko.observable("Administration"),
    sections: ["profile", "settings", "notifications"],
    selectedSection: ko.observable()
    };

    var viewModel = {
      subModelA: profileModel ,
      subModelB: shellModel 
    };

    ko.applyBindings(viewModel);

答案 1 :(得分:0)

您无法将ko.applyBindings(...)调用到相同的父元素,甚至是同一父元素中的子元素。

当您致电ko.applyBindings(shellModel)时,您将模型绑定到整个DOM,之后,您将在同一文档的子元素中启动其他绑定。

如果您想这样做,请将两个视图模型合并为一个并执行ko.applyBindings(mergedModel),它应该适用于您的方案。或者将ko.applyBindings(...) shellModel调用为一个不应该是profile的父级的具体元素。

答案 2 :(得分:0)

你可以尝试这样的东西,它可以合并两个视图模型。类似于继承,viewmodel2继承了viewmodel1的所有属性。

function viewModel1() {
  var self = this;

  self.vm1Alert = function() {
    alert('Model 1 stuff')
  };
}


function viewModel2() {
  var self = this;

  viewModel1.call(self);
  self.vm1Alert(); //from the first viewmodel
  alert('Model 2 stuff');

}
ko.applyBindings(new viewModel2());
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>