javascript - 从 ViewModel 外部调用 Knockout 函数

标签 javascript knockout.js

在我的具体示例中,有几个不同的小部件都有自己封装的 ViewModel。我需要一个全局保存按钮来保存每个单独的 ViewModel。我似乎无法弄清楚如何在各个 ViewModel 上调用函数。

示例 - 如何在每个 ViewModel 上调用 Save 函数:http://jsfiddle.net/sNSh2/4/

var ViewModel1 = function() {
    var self = this;
    self.firstName = ko.observable('');
    self.lastName = ko.observable('');

    self.firstName('John');
    self.lastName('Doe');

    self.Save = function () {
        alert(ko.toJSON(self));
    };
};
ko.applyBindings(new ViewModel1(), document.getElementById("person"));

var ViewModel2 = function() {
    var self = this;
    self.subscriptionLevel = ko.observable('');

    self.subscriptionLevel('premier');

    self.Save = function () {
        alert(ko.toJSON(self));
    };
};
ko.applyBindings(new ViewModel2(), document.getElementById("subscription"));

$('#save').on('click', function() {

});

最佳答案

我不明白你的问题,为什么不简单地持有你的模型对象的引用呢?

$(function() {
  ...
  var m1 = new ViewModel1();
  ko.applyBindings(m1, document.getElementById("person"));

  ...
  var m2 = new ViewModel2();
  ko.applyBindings(m2, document.getElementById("subscription"));

  $('#save').on('click', function() {
    m1.Save();
    m2.Save();
  });
});

如果您真的无法获取所有模型对象的引用(可能在独立的 js 文件中定义),ko 提供了从关联的 DOM 对象中获取上下文对象的方法。您仍然可以这样做:

ko.contextFor(document.getElementById("person")).$data.Save();
ko.contextFor(document.getElementById("subscription")).$data.Save();

关于javascript - 从 ViewModel 外部调用 Knockout 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22491482/

相关文章:

javascript - if else 语句反转

javascript - 如何在 KnockoutJS 中用 {{}} 样式绑定(bind)替换 data-bind 标签?

php - 在文件输入更改时上传文件

javascript - 变量中的运算符字符停止 jQuery 定位

javascript - 在 ASP.NET MVC 中将 anchor 标记 id 传递给 javascript

javascript - 在不引起递归的情况下将两个 knockout 变量连接在一起

javascript - knockout : Function Scope Error

javascript - 如何设置切换效果的样式?

javascript - knockout.js 输入框事件更改 - 传递旧值

javascript - knockout 绑定(bind)包装器,输入更改不会触发可观察订阅