Я столкнулся с этой статьей (http://coenraets.org/blog/2012/01/backbone-js-lessons-learned-and-improved-sample-app/) и задавался вопросом, является ли идея привязки и визуализации представлений в маршрутизаторе после их создания наилучшей практикой. Я привязывал свои взгляды и делал их в своем определении.Backbonejs view binding conceptual feedback
В настоящее время это, как я создание и вызов моих взглядов:
EmployeeView:
EmployeeView = Backbone.View.extend({
el: '#content',
template:template,
initialize: function() {
this.collection.fetch({
reset: true
});
this.collection.on('reset',this.render, this);
},
render: function(){
this.el.innerHTML = Mustache.to_html(this.template, { employee_list: this.collection.toJSON()});
console.log('render called');
}
Мой маршрутизатор:
employeeList: function() {
var c = new EmployeeCollection
new EmployeeView({
collection: c
});
}
Он отлично работает. Но согласно статье лучше практике сделать следующее:
EmployeeView = Backbone.View.extend({
template:template,
initialize: function() {
this.collection.fetch({
reset: true
});
this.collection.on('reset',this.render, this);
},
render: function(){
this.el.innerHTML = Mustache.to_html(this.template, { employee_list: this.collection.toJSON()});
console.log('render called');
return this;
}
маршрутизатора
employeeList: function() {
var c = new EmployeeCollection
$('#content').html(new EmployeeView({collection: c}).render().el);
},
Мне нравится решение в статье, потому что это разъединяет мнения других DOM событий, как говорится в статье, и позволяет мне сосредоточить все свои настройки и настройки в одном месте, маршрутизаторе. Но поскольку я передаю коллекцию/модель и мне нужно получить данные в моей инициализации, моя страница отображает дважды. Мои вопросы:
- Действительно ли это самая лучшая практика?
- Как избежать вызова рендера дважды, если я хочу использовать предложенный метод?
- Что делать, если у меня есть случаи, когда у меня есть взаимодействие с конечным пользователем, а затем нужно обновить коллекцию/модель представления? Должен ли я сделать это с моей точки зрения или это может случиться и в маршрутизаторе?