Этот вопрос больше связан с тем, как структурировать код или, точнее, ответственность моделей в шаблоне MVVM с помощью Knockout. Я использую Knockout с Durandal, но вопрос может быть общим вопросом для шаблона 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);
};
Мой 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>
Мой вопрос потому что моя модель обладает наблюдаемым свойством, и всякий раз, когда изменяется свойство, он обновляет представление. Но по существу это модель, и ответственность за обновление пользовательского интерфейса зависит только от модели представления.
Так должен ли код, относящийся к обновлению счета, по существу getCount, жить на модели-модели и модели - это не подходящее место для этого. Где различие того, какой код должен оставаться в поле зрения модели или модели.
Модель представляет собой объекты в вашей системе, тогда как ViewModel - это модель для пользовательского интерфейса. Модель должна взаимодействовать с постоянством/backend, чтобы обновить себя. ViewModel создаст мост между моделью и интерфейсом (2 пути). бэкенд <-> Модели <-> ViewModel <-> Посмотреть –
Моя модель в вышеуказанном случае взаимодействует с сервером для обновления этого значения счетов плюс он также имеет наблюдаемое свойство, которое имеет два способа связывания с точкой зрения. Но после чтения ниже ответа я более склонен думать о нем как viewModel. Пожалуйста, поправьте меня, если я ошибаюсь. – nimgrg
для привязки UI, ваша модель и ViewModel являются ViewModel. Однако не забывайте, что модель является моделью домена, например. User, Product и т. Д., Тогда как ViewModel специфичен для пользовательского интерфейса. –