Согласно MVC, модели представляют собой «чистое» представление данных.Вам не нужны презентационные или неСУХИЕ данные.Например, если ваша модель имеет поле «comment_count», оно также не должно содержать поле «use_plural», чтобы вы могли знать, печатать ли «comment» или «comments».
This post has 0 comments
This post has 1 comment
This post has 2 comments
...
Если выПоместить эту информацию в модель, это плохое разделение интересов, однако альтернативой является получение этой информации в представлении.Например:
var FooView = Backbone.View.extend({
render: function(){
this.data = this.model.toJSON();
this.data.use_plural = this.data.comment_count === 1;
// and fifty more lines like the above
$(this.el).html(ich['foo_template'](this.data));
}
});
Мой вопрос заключается в том, что существует необходимость в промежуточных данных, которые слишком видны для представления, чтобы быть частью модели, но слишком моделируют для того, чтобы быть частью представления.,Это то, что адрес MVVM?Я посмотрел это, но это выглядело очень специфично для Microsoft-tech-stack.Я думал о том, чтобы поместить его в функцию и вызвать изнутри методов render ():
function deriveData(model){
var data = model.toJSON();
data.use_plural = data.comment_count === 1;
// and fifty more lines like the above
return data;
}
var FooView = Backbone.View.extend({
render: function(){
this.data = deriveData(this.model);
$(this.el).html(ich['foo_template'](this.data));
}
});
var BarView = Backbone.View.extend({
render: function(){
this.data = deriveData(this.model);
$(this.el).html(ich['bar_template'](this.data));
}
});
Другая идея заключалась в том, чтобы иметь класс AbstractView и наследовать его, например, так:
var AbstractView = Backbone.View.extend({
deriveData: function(){
this.data = this.model.toJSON();
this.data.use_plural = this.data.comment_count === 1;
// and fifty more lines like the above
}
});
var FooView = AbstractView.extend({
render: function(){
this.deriveData();
$(this.el).html(ich['foo_template'](this.data));
}
});
var BarView = AbstractView.extend({
render: function(){
this.deriveData();
$(this.el).html(ich['bar_template'](this.data));
}
});
Это не так много, что я в тупике, я просто хочу убедиться, что я не плыву по невежеству, пока есть эта удивительная методология, которая решает именно этот вопрос.Есть ли у кого-нибудь какие-либо рекомендации или мысли, или есть хорошо зарекомендовавшие себя образцы, которые я мог бы использовать здесь?Спасибо.