4

使用 Knockout 有几种潜在的视图模型创建模式,一种是使用文字:

var viewModel = {
    firstname: ko.observable("Bob")
};

ko.applyBindings(viewModel );

另一种是使用函数:

var viewModel = function() {
    this.firstname= ko.observable("Bob");
};

ko.applyBindings(new viewModel ());

如本问题所述:

声明为对象文字与函数的淘汰视图模型之间的区别

我的偏好一直是使用函数,因为它本质上为您提供了一个“工厂”,允许您创建同一视图模型的多个实例。

使用 KendoUI,我看到的所有示例都使用文字语法:

var viewModel = kendo.observable({
     firstname: "Bob"
});

kendo.bind(document.body, viewModel);

我的问题是,使用 Kendo 是否可以通过函数模拟视图模型创建的 Knockout 风格?这将允许我创建同一视图模型的多个实例,添加“私有”功能等......

4

1 回答 1

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);
于 2013-04-07T08:42:23.507 回答