2013-04-03 42 views
4

隨着淘汰賽有幾個潛在的視圖模型的創建模式,一種是使用文字:KendoUI - 你可以創建視圖模型的功能

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

我的問題是,與劍道是可以通過函數來​​模擬視圖模型創建的淘汰賽風格?這將允許我創建同一視圖模型的多個實例,添加'私人'功能等...

回答

8

經過一番思考,我意識到'當然這是可能的!' ...

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

    return kendo.observable(this); 
}; 

var viewModel = new ViewModel(); 

kendo.bind(document.body, viewModel); 

雖然你必須要小心,以引用「這個」的構造函數內,因爲這取決於當他們執行他們可能指的是不可觀察的對象上:

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