이 질문은 코드를 구조화하는 방법 또는 좀 더 정확하게 Knockout을 사용하여 MVVM 패턴에서 모델의 책임을 수행하는 방법과 관련이 있습니다. Durandal과 함께 Knockout을 사용하고 있지만 질문은 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);
};
내 뷰 모델처럼 내 모델의 컬렉션을 취 지금
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 또는 모델에서 어떤 코드를 유지해야하는지에 대한 구분은 어디에 있습니까?
모델은 시스템의 엔티티를 나타내지 만 ViewModel은 UI의 모델입니다. 모델은 자체를 업데이트하기 위해 지속성/백엔드와 상호 작용해야합니다. ViewModel은 모델과 UI (2 가지 방법) 사이를 연결합니다. 백 모델 ViewModel <->보기 –
위의 사례에서 사용한 내 모델은 백엔드와 상호 작용하여 카운트 값을 업데이트하고 뷰에 양방향 바인딩이있는 관찰 가능한 속성을가집니다. 그러나 독서 후에는 아래 답변을 viewModel로 생각하는 경향이 더 큽니다. 내가 틀렸다면 나를 바로 잡아주세요. UI 바인딩의 경우 – nimgrg
이면 Model과 ViewModel은 모두 ViewModel입니다. 그러나 모델은 도메인 모델입니다. ViewModel은 UI에만 국한된 반면, ViewModel은 User, Product 등입니다. –