2012-12-19 10 views
11

私はbackbone.jsを使ってサンプルアプリケーションを書いています。私のモデルIこの方法で再レンダリング私の見解Backbone Renderモデル更新時の表示

$('.target').html(""); 
$('.target').append(this.$el.html(this.template(model))) 

の更新に

ビューは、[変更イベントに]モデルの更新後に再レンダリングされると、elの子に添付イベントが取得失われた[jQueryライブのようではないようです。これは既知の問題ですか、何か不足していますか? appendの代わりにhtmlを置き換えるべきですか? fiddle

+0

あなたのフィドルを修正して実行することができます。例えば。アンダースコアとバックボーンも含めてjQueryを使用しても –

+1

の2つのステートメントは必要ありません。 '$( '。target').html(this。$ el.html(this.template(model)))'を使用してください。これは、HTMLをクリアして新しいものを追加するのと同じです – Matanya

+0

@Mikke Fielden DIは私の問題を理解するのに十分だと思った。 – Tamil

答えて

10

ビューがDOM内に置かれたら、引き続き削除して追加する必要はありません。私はこれを管理する最も簡単な方法は、ビューからDOM挿入を完全に削除し、view.renderの呼び出し元にそれを処理させることだと思います。

ビュー:

render: function() { 
    this.$el.html(this.template(model)); 
    return this; 
} 

発信者(最初にレンダリング):その後のオン

var view = new SomeView(); 
$('.target').append(view.render().el); 

はレンダリング:

view.render(); 

ビューは、それは楽しく続けることができDOMにレンダリングされた後、親ビューについて何も知らなくても自分自身を再レンダリングします。イベントバインディングはレンダリングの間も損なわれないようにする必要があります。

+0

しかし、私はあなたの代わりにする代わりに 'append'の私のモデルの儀式のcozを更新し続ける同じコンテンツを2回または何回も追加しますか? – Tamil

+1

@Tamilポイントは、ビューを最初に表示したいときに一度だけ 'append 'することです。その後、 'view。$ el'はすでにDOM内にあるので、ビューの' render'を呼び出すだけで十分です。私は明確にするために私の答えを更新しました。しかし、はい、 '$ .replaceWith'または他の方法でも同じ結果が得られます。 – jevakallio

+0

@fenciff私はこれを知らなかった:)それは本当にうまくいった:) – Tamil

関連する問題