javascript - Knockout.js - 如何更改 View 模型

标签 javascript mvvm knockout.js

我正在尝试更改绑定(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/

相关文章:

c# - WPF 中的 MVVM 模式 - 如何处理我无法控制的模型?

wpf - Clean Implementation 在 MVVM ViewModel 中显示弹出错误消息

javascript - 带模型的 knockout 计算列

javascript - 带有 HTML 标签的字符串在 foreach 中无法被识别

knockout.js - 使用从服务器接收的 JSON 数据更新 View 模型时刷新 Knockout 绑定(bind)

javascript - 使用 JavaScript 从表中删除一行

javascript - VideoJS MP4 结束时自动加载新视频

wpf - 什么时候放弃 MVVM 才有意义?

javascript - 将毫秒转换为本地时间和日期 javascript

javascript - 单击按钮时在 <td> 中显示计算的算术平均值