这个问题更多的是关于如何使用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