Knockout.js - 每页多个 ViewModel;具有不同模型上下文的页面范围的函数

标签 knockout.js knockout-2.0

我正在构建一个包含多个表单的巨大页面,用户将按顺序填写这些表单。

我想让每个部分都有自己的模型,并计划拥有一个导入子模型的 masterViewModel。

然而,每个部分都有具有相同功能的编辑和保存按钮:

  1. 编辑将模型切换到编辑模式
  2. Save 验证输入,保存数据(通过 ajax),并切换回模型状态

按钮组之间的唯一区别是它们的模型上下文。

我在制作可以使用 masterViewModel/subViewModels 引用不同模型的页面级保存和编辑功能时遇到问题。

有人对此有任何指导吗?

谢谢。

最佳答案

如果您在 Root View 模型上有一个函数,那么您可以从任何地方调用它,例如 click: $root.save

当 Knockout 调用该函数时,它将上下文 (this) 设置为当前数据,并将其作为第一个参数传递。因此,第一个参数将包含您当前的模型,您可以从那里处理它。

这是一个示例:http://jsfiddle.net/rniemeyer/v22gd/

var viewModel = {
    one: {
        name: ko.observable("Bob")   
    },
    two: { 
        name: ko.observable("Sue")
    },
    save: function(model) {
        alert(ko.toJSON(model));
    }
};

ko.applyBindings(viewModel);

标记如下:

<div data-bind="with: one">
    <input data-bind="value: name" />
    <button data-bind="click: $root.save">Save</button>
</div>

<div data-bind="with: two">
    <input data-bind="value: name" />
    <button data-bind="click: $root.save">Save</button>
</div>

关于Knockout.js - 每页多个 ViewModel;具有不同模型上下文的页面范围的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16547773/

相关文章:

javascript - 如何定义使用先前值确定 Knockout 类的自定义绑定(bind)?

asp.net - 我可以 ko.observable session 变量吗?

html - knockout 绑定(bind)弄乱了单选按钮的格式

javascript - 复选框标签启用禁用knockoutjs

javascript - 如何在每个表行上放置点击事件并将结果作为参数传递以将新数据绑定(bind)到另一个源?

javascript - knockout 绑定(bind)不更新

javascript - 具有两个 View 模型的相关可观察对象?

javascript - 取消选中大型 (1000) 数据集上的复选框时,Knockout 速度很慢

knockout.js - 初始化嵌套数据后,Knockout computed observable 不会更新

javascript - knockout 绑定(bind)自定义组件,使其不与中心 View 模型冲突