1

この質問は、コードを構造化する方法、またはより正確には 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またはモデルに残す必要があるかの違いはどこにありますか。

4

2 に答える 2

2

正直に言うと、モデルをビューモデルとして分類します。モデルは、Ajax 呼び出しから返される json オブジェクトであり、それらのそれぞれに対してビュー モデルを作成します。私に関する限り、ネストされたビューモデルを使用しても問題はありません。

于 2013-04-11T12:19:07.673 に答える