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

Col*_*inE 4 mvvm kendo-ui

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

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

ko.applyBindings(viewModel );
Run Code Online (Sandbox Code Playgroud)

另一种是使用功能:

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

ko.applyBindings(new viewModel ());
Run Code Online (Sandbox Code Playgroud)

详情如下:

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

我一直喜欢使用函数,因为它实际上为您提供了一个"工厂",允许您创建同一视图模型的多个实例.

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

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

kendo.bind(document.body, viewModel);
Run Code Online (Sandbox Code Playgroud)

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

Col*_*inE 8

经过一番思考,我意识到'当然这是可能的!' ...

ViewModel = function() {
     this.firstname = "Bob";

     return kendo.observable(this);
};

var viewModel = new ViewModel();

kendo.bind(document.body, viewModel);
Run Code Online (Sandbox Code Playgroud)

虽然你必须要小心在构造函数中对'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);
Run Code Online (Sandbox Code Playgroud)