Менеджер компоновки магистрали после рендера

Я использую 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");
},

У меня есть 6 пунктов в собственности книг модели, и я звоню render() за каждую книгу. В конце концов, я получаю "после рендеринга" только один раз. Что случилось? Где недостающие 5 "после рендеринга" логов??

1 ответ

Решение

Приведенный выше код вызывался внутри метода afterRender MyView. По неизвестным причинам много звонков render() один за другим не вызывайте 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);
    });
},
Другие вопросы по тегам