在我的具体示例中,有几个不同的小部件都有自己封装的 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/