この質問は、コードを構造化する方法、またはより正確には Knockout を使用した MVVM パターンでのモデルの責任に関係しています。Durandal で Knockout を使用していますが、質問は 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);
};
私のviewModelは、次のようなモデルのコレクションを取ります:
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またはモデルに残す必要があるかの違いはどこにありますか。