MVCによると、モデルは「純粋な」データ表現です。プレゼンテーションまたは非DRYデータはそこには必要ありません。たとえば、モデルに「comment_count」フィールドがある場合は、「コメント」または「コメント」を印刷するかどうかを知るために、「use_plural」フィールドも含めてはなりません。あなたがモデルにその情報を入れた場合、それは懸念の悪い分離Backbone.jsでのMVCのガイダンスの検索
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のハイテクスタック特有のようでした。
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));
}
});
がそれだ:
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クラスを持っているので、同じように、それを継承することでした。私は()メソッドのレンダリングの中から関数にそれを入れて、それを呼び出すことを考えていましたそれほど多くはありませんが、私はちょうど私が無知で浮かんでいないことを確認したいと思っていますが、この正確な質問に対処するこの素晴らしい方法論があります。誰もが何らかの勧告や思考を持っているのですか、ここで私が活用できる確立されたパターンがありますか?ありがとう。
また、テンプレートにはこのようなロジックを組み込んだロジックが埋め込まれていることがありますが、ロジックなしのテンプレートを使用することはできません。さまざまな理由で避けたいもののようです。 – greim