1

这个问题更多地与如何构造代码有关,或者更准确地说是使用 Knockout 在 MVVM 模式中模型的责任。我将 Knockout 与 Durandal 一起使用,但问题可能是 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 回答
1

Knockout 并没有真正实现 MVVM;它更像是 VVM。其他库,如 Backbone 等,使用模型;淘汰赛真的不行。为了在 Knockout 中使用 MVVM,您的“模型”是您的服务器端数据库实体。

于 2013-04-11T21:50:11.097 回答