這個問題更多的是關於如何使用Knockout構造代碼或者更精確地說MVVM模型中模型的責任。我使用Durandal Knockout,但問題可能是MVVM模式的一個通用問題。對於如MVVM模型的責任
我有型號爲這樣:
var Model = function(data){
this.name = data.name;
this.count = ko.observable();
};
Model.prototype.getCount = function(){
var self = this;
setInterval(function(){
//some ajax call to get the count
self.count(data.count);
}, 1000);
};
我的視圖模型需要我的模型的集合,如:
var ViewModel = function(){
this.models = ko.observableArray([]);
//ajax call to get the required data
data.Items.forEach(function(item){
var model = new Model(item);
model.getCount();
this.models.push(model);
}
};
現在我的看法
<div data-bind="foreach: models">
<div data-bind="text: name"></div>
<div data-bind="text: count"></div>
</div>
我的問題是因爲我的模型有一個可觀察的屬性,每當屬性更改時它都會更新視圖。但實質上它是一個模型,更新UI的責任應該僅僅依賴於視圖模型。
所以應該更新計數的代碼基本上是getCount,生活在視圖模型和模型是不正確的地方。哪些代碼應該保留在viewModel或模型中的區別在哪裏?
模型表示系統中的實體,而ViewModel是UI的模型。 模型應該與持久性/後端進行交互以更新自身。 ViewModel將在Model和UI之間搭建橋樑(2種方式)。 後端<->型號<->視圖模型<->查看 – 2013-04-11 13:12:46
我在上述情況下的模型與後臺交互,以更新它的計數值再加上它也有它有一個雙向綁定到視圖的觀察特性。但在閱讀下面的答案後,我更傾向於將其視爲viewModel。如果我錯了,請糾正我。用於UI綁定的 – nimgrg 2013-04-11 13:52:26
,您的Model和ViewModel都是ViewModel。但是,不要忘記模型是領域模型,例如用戶,產品等,而ViewModel特定於UI。 – 2013-04-11 14:16:30