1

以下は、Backbone.jsで小さなサブビューを作成するための非常に一般的なパターンのようですthis.$el.append(new ListItem({...}).render().el)

renderビューのデータがまだフェッチされていないなど、外部からの原因による問題しか考えられません。これが、ビューに独自のレンダリングを任せる理由です。ここで何かが足りませんか?

編集:物事を明確にするための擬似コードの例(無関係なコードは省略など):

なぜ以下がrender明示的に呼び出されるのですか?

var FruitView = Backbone.View.extend({
  render: function() {
    this.$el.html(...);
  }
});

var FruitListView = Backbone.View.extend({
  render: function() {
    this.collection.each(function(fruit) {
      this.$el.append(new FruitView({...}).render().el);
    });
  }
});

これの代わりにFruitView、独自のレンダリングを処理します。

var FruitView = Backbone.View.extend({
  initialize: function() {
    this.render();
  },

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

var FruitListView = Backbone.View.extend({
  render: function() {
    this.collection.each(function(fruit) {
      this.$el.append(new FruitView({...}).el);
    });
  }
});
4

1 に答える 1

0

親ビューはコレクションにバインドされ、各「行」はモデルにバインドされる可能性があります。

したがって、ビューのインスタンス化とレンダリングは、コレクションの 'reset' と 'add' (または 'add' で新しいレンダリングされた行を追加するための別の関数) の再レンダリング バインディングと re-たとえば、「変更」の行にバインドをレンダリングします。

最も一般的なケースでは、コレクションが空の場合、コード行が含まれているループは実行されないと思います。次に、コレクションが「リセット」され、ビューが初めてデータとともにレンダリングされます。

ただし、いつものように、要点を見逃している可能性があります ;-) 今日の午後、このスレッドを見て、メモがないか確認します。

編集

私はあなたが何を意味するか分かります。理由がよくわかりません。最初に始めたときによく見たパターンだったので、通常は別の方法で書いていると思います。

あなたが言うように-すべてのデータ/ロード/バインディングの問題はそれに含まれません。

init() で render() を使用しない唯一の理由は、レンダリングせずに初期化したい場合があると思いますか?

于 2012-06-26T14:10:37.670 に答える