1

Backbone を使用して単一の Web ページ アプリを構築しています。

私のマスター ビューは、URL に基づいてページの本文部分を置き換えるテンプレートに依存していますが、そのビューに「el」を提供する必要があるため、DOM に挿入されるテンプレート自体にしたかったのです。 「レンダリング」または「初期化」メソッド。

しかし、新しい MyMasterView を呼び出すと、インスタンス化時に DOM に存在しないため、el は未定義です。

どのようにできるのか ?

私が見つけた唯一の修正は、コンテンツを置き換える既存の DOM に el を設定し、レンダリングで a を呼び出す.remove().append(the_template)ことですが、それが最善の方法かどうかはわかりません。

4

2 に答える 2

3

DOM に次の div があるシナリオを考えることができます

<div id="existing">

</div>

この div は、ビューによって生成された html を挿入したい他の要素にすることができます。

次のテンプレートがあるとします。

<div id="inside_template">
  <!-- content of the template goes here -->
</div>

すでに div に存在existingするため、ビューの として指定できます。el唯一の問題は、タグのようなbodyものがある場合、ビューをクリアしているときにビューから削除すると(メモリリークを防ぐため)、DOMからタグが削除され、望ましくない可能性があることです。

その解決策は、 as として指定existingel、その中でビューのhtmlをレンダリングし、その後、テンプレートhtmlをDOMに追加した直後にel呼び出すことができます。setElement

render : function() {
  this.$el.html(this.template());
  this.setElement("#inside_template");

  // another render method content
}

これが行うことは、elビューの をexisting(または他の DOM 要素) からに変更することinside_templateです。したがってelinside_template要素を削除している間、要素は削除され、existing要素はDOMにそのまま保持されます。

于 2012-12-07T06:13:44.190 に答える
0

elnull のままにして、設定してみましたtagNameか? これを行うと、_ensureElementはビューの要素に対して新しい分離 DOM ノードを作成します。ページの DOM から切り離された DOM フラグメントをレンダリングできる必要があり、外部コードは、appendまたはおそらく jQuery のようなものを使用してその要素を配置できreplaceWithます。

于 2012-12-07T05:18:11.783 に答える