По моему мнению, проблема в том, что метод визуализации представления возвращает представление.
Ваше представление, вероятно, выглядит примерно так:
var Someview = Backbone.View.extend({
initialize: function () {
this.template = _.template($("#someview-template"));
this.model.on('change', this.render());
},
render: function() {
var html = this.template(this.model);
this.$el.html(html);
return this;
}
});
Тогда где-то у вас есть метод, который создаетпредставление и присоединяет его к DOM.
var $main = $('#main'); //main area in the DOM eg: <div id="main"></div>
$main.append(new Somveview({model: item}).render().$el);
Проблема в том, что render () должен быть вызван для получения доступа к элементу представления ... Подумайте об этом, когда в модель будут внесены изменения.представление будет отображаться снова.Это означает, что если вы хотите добавить какие-либо эффекты перехода, такие как затухание или скольжение, вы, вероятно, собираетесь добавить их в метод визуализации представления.
Добавьте некоторые эффекты в метод визуализации представлений.
var Someview = Backbone.View.extend({
initialize: function () {
this.template = _.template($("#someview-template"));
this.model.on('change', this.render());
},
render: function() {
var html = this.template(this.model);
this.$el.html(html).hide().slideDown(600);
return this;
}
});
Это работает, любое изменение модели вызовет рендеринг вида, и мы увидим эффект скольжения вниз.Но только потому, что представление уже добавлено в DOM !!!ПРОБЛЕМА, мы замечаем, что эффект slideDown не возникает при загрузке страницы.Итак, как патч, мы дублируем эффект в том месте, где мы создаем представление и добавляем его в DOM.
Причина, по которой эффект не возникает при загрузке страницы, заключается в том, что эффект уже произошелпрежде чем мы добавим элемент представления в DOM.
Но зачем дублировать эффект, имеет смысл немного изменить представление.
var Someview = Backbone.View.extend({
initialize: function () {
this.template = _.template($("#someview-template"));
this.model.on('change', this.render());
},
render: function() {
var html = this.template(this.model);
this.$el.html(html);
//no longer returning the views object from the render method.
}
});
Создайте представление и добавьте егов ДОМ
var $main = $('#main'); //main area in the DOM eg: <div id="main"></div>
var someview = new Somveview({model: item}); //create the view
$main.append(someview.$el); // add the view's element to the DOM
someview.render(); // Rendering after we have appended to the DOM !!