1

Backbone と Layout Manager を使用しています。MyView.js 内に次のコードがあります。

afterRender: function() {
    var scope = this;
    this.model.get("books").each(function(bookModel) {
            var bookView = new BookView({
                model: bookModel
            });
            scope.insertView(".books", bookView).render();
    });
},

BookView.js 内には afterRender メソッドがあります。

afterRender: function() {
    console.log("after render");
},

モデルの books プロパティに 6 つの項目があり、render()それぞれの本を呼び出します。最終的に私が得るのは、一度だけ記録された「レンダリング後」です。なにが問題ですか?欠落している 5 つの「レンダリング後」ログはどこにありますか??

4

1 に答える 1

0

上記のコードは、MyView の afterRender メソッド内で呼び出していました。理由は不明ですが、render()1 つずつ呼び出す多くの場合、各ブックの afterRender() は呼び出されません。LayoutManager のドキュメントを何度も読んだ後、ビューをレンダリングせずにメソッド内で
呼び出す必要があることに気付きました。この方法では、すべてのサブビューがレンダリングされ、適切に呼び出されます。insertView()beforeRender()render()afterRender()

beforeRender: function() {
    var scope = this;
    this.model.get("books").each(function(bookModel) {
            var bookView = new BookView({
                model: bookModel
            });
            scope.insertView(".books", bookView);
    });
},
于 2012-12-10T17:39:39.833 に答える