1

backbone.jsとjavascriptから始めました。私のコレクションでは、「reset」イベントをリッスンして、ビューの「render」関数を呼び出させることができます(this)。しかし、次のようにルーターのDOMにビューを追加します。

$('#container').html(view.render().el)

私はrender()。el(HTMLテキストを返すと思います)を呼び出し、それをコンテナdivに追加します。ビューだけでrenderを呼び出すのは無意味です。では、レンダリング関数を呼び出すだけの「reset」イベントでビューが完全に更新されるのはなぜですか(self(ビューオブジェクト)を返すだけなので役に立たないのですが、実際の更新はルーターで行われ、ビューのレンダリングされたelがコンテナに追加されますdiv)?

私は、なぜ答えを知っているのか、その背後にある理由がわからないというチュートリアルに従っています。

ありがとう

4

1 に答える 1

1

次のように、 'のtop要素を-elementに$('#container').html(view.render().el)挿入します。view#container

<div id="container">
  <div class/id="whatever-your-view-has-defined">
    <!-- THIS IS WHERE YOUR VIEW PUTS ANYTHING GOING TO $(this.el) or this.$el -->
  </div>"
</div>

したがって、ビューの対応するコレクションまたはモデルのフェッチが完了する前にrenderを呼び出すと、おそらくビュー自体の要素をコンテナに挿入するだけです。これで、コレクション/モデルがフェッチを完了してをトリガーするresetと、ビューが再びレンダリングされます。レンダリングは次のようになっていると思います。

render: function() {

  // do something with $(this.el) or this.$el

  // loop through collection and insert something from each model to the view
  // OR
  // take the view's model and insert it to the view
  // I reckon the inserting is done with templates or jQuery manipulation

  //finally 
  return this; // return this to allow chaining render to other things like calling el
}

これは基本的に、最初のレンダリングがビューをDOMにステージングし、後に呼び出されたレンダリングがビューにresetコンテンツを入力することを意味します。あなたは

$('#container').html(view.render().el)

一部、たとえば、ビューのid-propertyをに設定するとcontent、ビューは、その要素である識別子contentを持つ要素を自動的に検索します。ただし、ビューのすべてのコンテンツがcontent-element要素に直接挿入されます。

これがお役に立てば幸いです。まだ不明な点がある場合はコメントしてください。

于 2012-07-02T12:35:00.217 に答える