【发布时间】:2016-07-04 13:45:04
【问题描述】:
我看到这篇文章 (http://coenraets.org/blog/2012/01/backbone-js-lessons-learned-and-improved-sample-app/) 想知道在实例化它们之后在路由器中绑定和呈现视图的想法是否是最佳实践。我一直在绑定我的视图并将它们呈现在我的视图定义中。
目前这是我设置和调用视图的方式:
员工视图:
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 事件分离,并允许我将所有调整和自定义集中在一个地方,即路由器。但是因为我正在传递一个集合/模型并且需要在我的初始化中获取数据,所以我的页面呈现了两次。我的问题是:
- 这真的是最佳做法吗?
- 如果我想使用建议的方法,如何避免两次调用渲染?
- 如果我有一些前端用户交互然后需要刷新视图集合/模型怎么办?在我看来,我是否必须这样做,或者路由器也会发生这种情况?
【问题讨论】:
标签: backbone.js backbone-views backbone-events backbone-routing backbone.js-collections