我正在尝试更改绑定(bind)到 DOM 模板某些部分的 View 模型(而不是更改 View 模型的值),但我无法弄清楚如何或是否可能
场景如下:
- 创建一个新的 View 模型对象
- 绑定(bind)它(例如 applyBindings(myViewModel)
- 创建另一个 View 模型对象
- 将新对象绑定(bind)到 DOM 的相同部分,这样所有元素现在都绑定(bind)到新对象。
我想做等同于更改 WPF 中控件的 DataContext 的值(KO 的 MVVM 模式基于该控件)
这样做的原因是我试图对列表中对象的表示和对象在其自己的 View 中的表示使用相同的 View 模型,所以我已经有了所有对象的 View 模型显示在列表中。
还有其他解决方法,但我认为这是最优雅的方法。
最佳答案
有两种使用多 View 模型的方法。第一种方法是像@nathan gonzalez 说的那样进行多重绑定(bind)。你应该绑定(bind)你的 View 模型。然而,这使事情变得有点复杂。因此难以管理。
第二种方式是使用master viewmodel。我会推荐这个。
http://jsfiddle.net/sinanakyazici/e29EZ/10/
<div data-bind="with: mainvm">
<span data-bind="text: prop, click : action"></span>
</div>
var vm = function(value)
{
this.prop = ko.observable(value);
var self = this;
this.action = function() {
console.log("clicked: " + self.prop());
}
}
var master = {
mainvm : ko.observable(null)
}
master.mainvm(new vm('viewmodel 1'));
master.mainvm(new vm('viewmodel 2'));
ko.applyBindings(master);
关于javascript - Knockout.js - 如何更改 View 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14036245/