2

ずっと前に、render()それはビュー自体の特権であり、親ビューの懸念ではないと確信していました。

しかし最近、バックボーンについて読んdelegateEventsで、実装方法について複雑な気持ちでした。これまでのところ、render()メソッド内でinitializeメソッドを呼び出していました。

徹底的なテストを行っていないか、問題に直面する可能性のある使用例を見つけていません。しかし、これまでのやり方に潜在的な問題が潜んでいるような気がします。

あなたの経験を教えてください。render()内でメソッドを呼び出す際の問題は何initializeですか? そして、あなたはそれをどのようにしますか?

親は、いつ、どこで自分自身をレンダリングするかを子供に指示していますか? それはまだ SoC の境界内にありますか (懸念の分離)?

4

2 に答える 2

1

「...昔、render()はビュー自体の特権であり、親ビューの問題ではないと確信していました。」

あなたは正しい方向に進んでいました。人々はしばしばパブリックメソッドのように扱いrenderますが、ビューの外側からrenderを呼び出すと、スパゲッティコードと混乱以外の何物にもならないことに気付くでしょう。

ベストプラクティスは、初期化の一部として、および関連するモデルの適切なイベントに応答して、レンダリング(またはレンダリングをスケジュール)することです。

于 2012-09-04T15:47:59.413 に答える
1

基本的に、最初の 2 つは render-within の親、

// parent view's render
render: function() {
  var child = new ChildView({el: this.$('.foo'), model: bar, ...});
  this.$el.append(child.render().el);
}

これは基本的に、子がレンダリングされる場所またはタイミングを親が指示する場合であり、render-within-itself は、

// parent view's render
render: function() {
  var child = new ChildView({el: this.$('.foo'), model: bar, ...});
  this.$el.append(child.el);
}

// child view's initialize
initialize: function() {
  ...
  this.render();
}

これは、レンダリングがいつ行われるかを子ビューが指示する場合です。私の意見では、後者の方が優れています。アプリケーションは、いつレンダリングする必要があるかをビュー自体だけが認識できるように配置する必要があります (初期化またはモデル/コレクションのフェッチの直後である必要があります)。後で呼び出されますが、render内での呼び出しに問題はありません。移植しても、その機能に違いはありません。initializedelegateEventsel

render内部での呼び出しinitializeは、状況に関係なく機能し、レンダリング方法が統一されるため、優れた方法です (フェッチ後に他のビューと同じ方法でレンダリングするビューを追加します)。私はまだこの方法でレンダリングを行う際に問題に遭遇したことはありません。

これが役立つことを願っています(またはあなたを安心させるのに役立ちます)!

于 2012-09-04T13:01:07.220 に答える