模型在MVVM中的职责

responsibility of model in MVVM

本文关键字:MVVM 模型      更新时间:2023-09-26

这个问题更多地与如何使用Knockout构建代码或更精确地说明MVVM模式中模型的职责有关。我使用淘汰赛与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或模型中的区别在哪里?

老实说,我会把你的模型归类为视图模型。模型是从Ajax调用返回的json对象,并为每个对象创建视图模型。就我而言,嵌套视图模型没有问题。

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