テンプレートを使用して最初にビューをレンダリングしようとしていますが、ドキュメントの一部である場合は、後続の呼び出しでビューを更新します。
私のアプリのページは少し似ています
<body>
<!-- ... -->
<div id="view_placeholder"/>
<!-- ... -->
</body>
そして、擬似コードで私はそのようなことをしたい
Backbone.View.extend({
// ...
render: function() {
if (this.el *IS NOT A CHILD OF document*) {
// render the contents from the template
} else {
// update the content visibility based on the model
}
},
// ...
});
これは、テンプレートに非常に多くのノードが含まれており、変更のたびにテンプレートを再生成することは現実的ではないためです。
rivets.jsなど、いくつかのデータバインディングライブラリを調べましたが、template:modelの関係にはあまり適合していません。
私が気づいたことの1つはthis.el.parentNode==null
、ドキュメントに追加する前に、これが決定的なテストであるかどうかはわかりません。いずれにせよ、このビューを別のビューでラップすると、そのテストの有用性が低下します(または、別のビューのel内で一度のように、過度に注意して、とにかくサブテンプレートをレンダリングしました。
私が見ることができる別のオプションは、レンダリングされたステータスを追跡するためにフィールドを使用することです。
Backbone.View.extend({
//
templateRendered:false,
// ...
render: function() {
if (!this.templateRendered) {
// render the contents from the template
this.templateRendered = true;
} else {
// update the content visibility based on the model
}
},
// ...
});
しかし、それは私にはハッキーだと感じます。
だから私の質問は:
テンプレートを完全にレンダリングしたため、再レンダリングする(そしてすべてのサブビューを再挿入する)のではなく、レンダリングされたテンプレートを微調整するだけでよいという事実を追跡するための最良の方法は何ですか?