1

私はしばらくの間いくつかのコードを見てきましたが、この状況で適用するベストプラクティスを決めることができません:

n サブビューを持つビューがあるとします。それらを初期化するための2つのプラクティスに出くわしました

1 内部初期化

initialize: function() {
  this.subViews = [];
  this.subViewModelCollection.each(function(model) {
    var view = new SubView({model: model});
    this.subViews.push(view);
    this.$el.append(view.el);
  }, this);
},

render: function() {
  _.invoke(this.subViews, 'render');
}

2 内部レンダリング

initialize: function() {
  ... // render handles the subviews
},

render: function() {
  this.subViews = [];
  this.subViewModelCollection.each(function(model) {
    var view = new SubView({model: model}).render(); // render optional
    this.subViews.push(view);
    this.$el.append(view.el);
  }, this);
}

これらは粗雑なサンプルにすぎませんが、私のジレンマを示しています。サブビューの初期化は関数initializeまたは関数で行う必要がありますか? render個人的には後者のバージョンを強く支持してきましたが、いくつかのコードを見て前者に傾倒しました。

では、サブビューをどこで初期化するのですか?なぜそこでそれを行うのですか?なぜ他のオプションよりも優れているのですか?

4

2 に答える 2

4

初期化で行う作業の量を最大化する必要があります。これは1回だけ行われるためです。また、レンダリング関数で行う作業の量を最小化する必要があります。これは通常、何度も呼び出される可能性があります(たとえば、シングルページアプリケーションやレスポンシブWebページ)。 )。

サブビューのrenderメソッドが生成されたhtmlを変更しないことがわかっている場合は、initializeメソッドでもサブビューのrenderメソッドを呼び出して、レンダリングされた要素を「メインビュー」に追加することもできます。

サブビューとメインビューの両方のrenderメソッドがとにかく(ページのロードなどの一部として)一度だけ呼び出される場合、それをどのように行うかはおそらく問題ではありませんが、通常、render関数で実行する作業の量を最小限に抑えますおそらく良いアドバイスです。

于 2012-09-07T10:36:28.907 に答える
0

実際のサブビューレンダリング機能を完全に新しい関数に入れますrenderSubViews()

これにより、柔軟性が向上します。

  • この関数はinitializeまたはから呼び出すことができrender、アプリケーションの成長/変更に応じて簡単に変更できます。
  • この新しい関数をイベント、つまりビューのイベントにバインドできresetます。
  • これはより論理的です。メインビューを初期化またはレンダリングするときにサブビューを自動レンダリングすることは意味がありますか?一方を他方に直接結び付ける必要がありますか?
于 2012-09-09T19:19:24.813 に答える