Knockout.js - 如何更改viewmodel

Jua*_*mpa 5 javascript mvvm knockout.js

我正在尝试更改绑定到DOM模板某些部分的视图模型(而不是更改视图模型的值)但我无法弄清楚它是如何或是否可能

这是场景:

  • 创建一个新的View Model对象
  • 绑定它(例如applyBindings(myViewModel)
  • 创建另一个View Model对象
  • 将新对象绑定到DOM的同一部分,以便所有元素现在都绑定到新对象.

我想做相当于改变WPF中控件的DataContext的值(KO的MVVM模式所基于的)

这样做的原因是我试图对列表中对象的表示和对象在其自己的视图中的表示使用相同的视图模型,因此我已经有一个视图模型用于显示的所有对象列表.

还有其他解决方法,但我认为这将是最优雅的方式.

sin*_*ici 8

使用多个viewmodel有两种方法.第一种方式是做多个绑定,比如@nathan gonzalez说.您应该绑定视图模型.然而,这使事情变得复杂.因此难以管理.

第二种方法是使用主视图模型.我会推荐这个.

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);
Run Code Online (Sandbox Code Playgroud)