Knockout.js:一个页面上的多个视图模型绑定或网页的一部分(Knockout.js: Mul

2019-08-04 17:44发布

我想知道是否可以使用Knockout.jsko.applyBindings()多次以不同的ViewModels绑定到页面的一个部分。 举例来说,假设我有这样的:

<div id="foo">...</div>
...
ko.applyBindings(new PageViewModel());
ko.applyBindings(new PartialViewModel(), $('#foo')[0]);

我现在应用两个视图模型绑定<div id="foo>这是合法的吗?

Answer 1:

你不想叫ko.applyBindings上多次相同的元素。 最好的情况下,这些元素会做更多的工作比必要的更新的时候,更糟糕的情况下,你将有多个事件处理程序烧制相同的元素。

有处理这种类型的东西,在这里详细介绍几种选择: knockoutjs模式的示例多视图的应用

如果你真的需要在内容的途中,你想打电话以后应用绑定的“孤岛”,那么你可以使用这里描述的技术: http://www.knockmeout.net/2012/05/quick-tip -skip-binding.html



Answer 2:

这是实现JqueryMobile-SPA时谈到一个共同的路障。 该方法:ko.applyBindings( viewmoderoot dom element )接受两个参数。 第二个参数来帮助时,您有多个虚拟机在你的页面。

例如 :

ko.applyBindings(model1, document.getElementById("view1")); 
ko.applyBindings(model2, document.getElementById("view2"));

其中厂景和视图2是该模型中的根DOM元素。 对于JqueryMobile-SPA这将是相应的模型页面ID。



Answer 3:

要做到这一点,最好的方法是使用“用”结合构建要绑定的局部视图模型中的股利。 您可以在此找到它拨弄

<div data-bind="with: model">
   <p data-bind="text: name"></p>
</div>

<div data-bind="with: anothermodel">
   <p data-bind="text: name"></p>
</div>​

var model = {
   name: ko.observable('somename'),
}

var anothermodel = {
    name: ko.observable('someanothername'),
}
ko.applyBindings(model);​

还检查了“与”装订文档在淘汰赛现场,看一个AJAX回调-部分装订场景。



Answer 4:

我的英语很糟糕.... =)

我用萨米加载局部视图,和淘汰赛模型绑定,我尝试使用ko.cleanNode但清洁我的所有绑定,所有的DOM节点已经改变的时候有一个绑定,属性__ko__聚集,然后我删除该属性与此代码和作品!, '#main'是我的节点。

var dom = dom || $("#main")[0];
for (var i in dom) {
  if (i.substr(0, 6) == "__ko__") {
     delete (dom[i]);
     break;
  }
}

使用后Ggle译者:

我用萨米为局部视图负荷,淘汰赛为模型绑定,我尝试使用ko.cleanNode但清洁我的所有绑定,所有的DOM节点已经改变,当他们有一个绑定, 聚集的属性,然后我除去该属性与此代码,和作品!“#main”是我的节点。



文章来源: Knockout.js: Multiple ViewModel bindings on a page or a part of a page