使用Knockout,有一些潜在的视图模型创建模式,一种是使用文字:
var viewModel = {
firstname: ko.observable("Bob")
};
ko.applyBindings(viewModel );
另一个是使用函数:
var viewModel = function() {
this.firstname= ko.observable("Bob");
};
ko.applyBindings(new viewModel ());
详情如下:
Difference between knockout View Models declared as object literals vs functions
我的偏好一直是使用功能,因为它实际上为您提供了一个工厂'允许您创建同一视图模型的多个实例。
使用KendoUI,我见过的所有示例都使用文字语法:
var viewModel = kendo.observable({
firstname: "Bob"
});
kendo.bind(document.body, viewModel);
我的问题是,使用Kendo可以通过函数模拟Knockout风格的视图模型创建吗?这将允许我创建相同视图模型的多个实例,添加'私有'功能等...
答案 0 :(得分:8)
ViewModel = function() {
this.firstname = "Bob";
return kendo.observable(this);
};
var viewModel = new ViewModel();
kendo.bind(document.body, viewModel);
虽然你必须要小心在构造函数中对'this'的引用,因为根据它们的执行时间,它们可能会引用不可观察的对象:
ViewModel = function() {
firstname = "Bob";
this.doSomething = function() {
// here 'this' does not point to an obervable, but 'that' does!
that.set("forename", "Craig");
}
var that = kendo.observable(this);
return that;
};
var viewModel = new ViewModel();
kendo.bind(document.body, viewModel);