KendoUI - 您可以将视图模型创建为函数

时间:2013-04-03 05:48:05

标签: mvvm kendo-ui

使用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风格的视图模型创建吗?这将允许我创建相同视图模型的多个实例,添加'私有'功能等...

1 个答案:

答案 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);