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

Sco*_*ott 3 knockout-2.0 knockout.js

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

我想让每个部分都成为自己的模型,并且计划使用一个导入子模型的masterViewModel.

但是,每个部分都有编辑和保存按钮,它们具有相同的功能:

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

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

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

有人对此有任何指导吗?

谢谢.

RP *_*yer 6

如果您在根视图模型上有一个函数,那么您可以从任何地方调用它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);
Run Code Online (Sandbox Code Playgroud)

标记如下:

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