从ViewModel外部调用Knockout函数
Calling Knockout function from outside ViewModel
在我的特定示例中,有几个不同的小部件具有自己封装的ViewModel。我需要一个全局保存按钮来保存每个单独的ViewModel。我似乎不知道如何在单个ViewModels上调用函数。
示例-如何在每个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();
Knockout具有基本的发布/订阅功能。
var postbox = ko.observable();
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));
};
postbox.subscribe(function(newValue){
self.Save();
}, self, 'save');
};
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));
};
postbox.subscribe(function(newValue){
self.Save();
}, self, 'save');
};
ko.applyBindings(new ViewModel2(), document.getElementById("subscription"));
$('#save').on('click', function() {
postbox.notifySubscribers(null, "save");
});
你只需要实例化你的ViewModel1和ViewModel2函数:
$('#save').on('click', function() {
var vm1 = new ViewModel1(),
vm2 = new ViewModel2();
vm1.SayHi();
vm2.SayHi();
});
相关文章:
- Knockout JS和简单的函数
- 如何在单击、Knockout时传递函数中的值
- 在ko.applyBindings(..)中执行Knockout js订阅函数(用于可观察对象)
- Knockout JS-将函数名与数组值连接起来
- 在href跳转到另一个html元素之前,执行Knockout.js数据绑定:点击函数
- 为什么我的数据绑定到一个计算函数不起作用(使用knockout.js和jade)
- 将jQuery事件函数应用于新的Knockout.js数组元素
- 调用函数的HTML Knockout单选按钮
- Knockout.js removeAll函数不起作用
- Knockout.js:在原型上调用函数,但保留在foreach的上下文中
- 将事件对象传递给 KNOCKOUT.js函数
- KNOCKOUT.js问题:“H.apply不是一个函数.(在'h.apply(e,r)'中,'
- 在 Knockout 中初始化时调用组件函数
- Knockout.js :使用存储库模式绑定到点击事件上的函数
- Knockout 计算函数内的异步调用
- 在 Knockout.js 中选择更改时引用当前模型项调用函数
- 在 KNOCKOUT.js 中动态调用 attr src 上的子级函数
- 未捕获的类型错误:未定义不是 KNOCKOUT 中的函数
- 如何将参数传递给 Knockout 中的计算函数
- 如何将当前元素传递给 Knockout.js 绑定中的 Javascript 函数