私は最初の実際の非チュートリアルBackboneアプリを実装していますが、バックボーン.jsの使用の側面について、2つの質問があります。これは、ビューのレンダリングel
をDOMに挿入することと、使用することとの関係です。の既存の要素el
。私はここであなた方全員にいくつかの「教えられる瞬間」を提供すると思います、そして助けに感謝します。
Webで見られるほとんどのバックボーンビューの例では、ビューを作成するときにtagName、id、classNameを指定し、それによってDOMからアタッチされていないelを作成します。それらは通常、次のようになります。
App.MyView = Backbone.View.extend({
tagName: 'li',
initialize: function () {
...
},
render: function () {
$(this.el).html(<render an html template>);
return this;
}
});
ただし、チュートリアルでは、レンダリングされたelをDOMに取り込むことを推奨する方法を説明できるとは限りません。私はそれをいくつかの異なる方法で見てきました。したがって、私の最初の質問は、ビューのrenderメソッドを呼び出してそのelをDOMに挿入するのに適切な場所はどこですか?(必ずしも同じ場所である必要はありません)。ルーター、ビューの初期化またはレンダリング機能、またはルートレベルのドキュメント準備機能で実行されるのを見てきました。($(function ()
)。これらの作業のいずれかを想像できますが、それを行う正しい方法はありますか?
次に、HTMLマークアップ/ワイヤーフレームから始めて、html部分をバックボーンビューに対応するjsテンプレートに変換します。ビューにアタッチされていない要素をレンダリングさせ、それを固定するためにhtmlにアンカーポイントを提供するのではなく、ビューの要素が1つだけで、それが消えない場合は、より自然な感じがします。空になった既存のラッパー要素(多くの場合、div
またはspan
)をel
それ自体として使用します。そうすれば、添付されていないelを挿入する場所をドキュメント内で見つけることを心配する必要がなくなり、最終的には次のようになります(余分なレイヤーに注意してください)。
<div id="insert_the_el_in_here"> <!-- this is all that's in the original HTML doc -->
<div id="the_el"> <!-- i used to be a backbone generated, unattached el but have been rendered and inserted -->
<!-- we're finally getting to some useful stuff in here -->
</div>
</div>
したがって、私の2番目の質問の一部は、基本的に静的なビューの場合、ページのHTMLの既存の要素をビューのHTMLとして直接使用することに何か問題がありますel
か?このようにして、すでにDOMの適切な場所にあることがわかり、renderを呼び出すと、ページのビューがすぐにレンダリングされます。これは、すでに存在する要素をビューの構成要素に「el」として渡すことで実現できます。そうすれば、私はそれをDOMに貼り付けることを心配する必要がないように思えます(質問1を一種の議論の余地があります)、renderを呼び出すとすぐにDOMが更新されます。例えば
<form>
<div someOtherStuff>
</div>
<span id="myView">
</span>
</form>
<script type="text/template" id = "myViewContents"> . . . </script>
<script type="application/javascript">
window.MyView = Backbone.View.extend( {
initialize: function () {
this.template = _.template($('#myViewContents').html());
this.render();
},
render: function () {
$(this.el).html(this.template());
return this;
}
});
$(function () {
window.myView = new MyView({ el: $('#myView').get(0) });
});
</script>
これは、ページの静的ビューに対して行うのに問題のない方法ですか?つまり、これらのビューは1つだけであり、どのような状況でも消えることはありません。それとももっと良い方法はありますか?ビューの使用方法に基づいて、さまざまな方法(ルーター、親ビュー、ページの読み込みなど)があることに気付きましたが、現在は最初のページの読み込みを確認しています。使用事例。
ありがとう