[英]Looking for guidance on MVC in Backbone.js
根據MVC,模型是“純”數據表示。 您不希望在其中存在演示數據或非DRY數據。 例如,如果您的模型具有“ 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技術堆棧。 我正在考慮將其放入函數中並從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));
}
});
倒不是讓我感到難過,我只是想確保我不會在無知中漂浮,而有一種很棒的方法可以解決這個確切的問題。 是否有人有任何建議或想法,或者在這里可以利用完善的模式? 謝謝。
這是個人觀點(即使它來自長期的經驗並為許多人所共有),因此請帶一點鹽。
MVC模式只是不太適合網絡。 問題似乎總是在控制器中 。 很多已經存在了一段時間的人都知道這一點並默默接受。 大多數框架使用術語MVC作為分類,因為很好,可以方便地用模式術語解釋框架的目標,並且大多數其他類似框架也使用該術語。
如果您確實需要給誰是View和Backbone中的Controller是一個含義,大多數人都認為它們都是View。 視圖不僅可以生成模板,還可以將事件從UI分發到模型,反之亦然。 如果確實需要將它們分開,則還可以認為View類是Controllers ,而模板是Views 。
希望您能想到: 叫什么都沒關系 。 盡管使用方式很重要。
關於您的問題的實際部分:根據情況,我會使用其中任何一個。 您一次使用的東西很小嗎? 在render
里面render
。 它是否是您的View體系結構的一部分,並且在多個視圖中都需要邏輯? 從基類派生。 處理其他所有事情的方式相同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.