我已经开始使用Backbone.js并尝试将路由转向特定的视图。在我的HTML
我有<a href="#project/1">
标签,用于呈现项目任务的视图。
查询
点击链接后,它会将id
的任务附加到DOM
,但是,当点击第二个链接时,它会将该任务附加到前一个下方。我不确定$.empty
视图的最佳做法是否会调用show
方法?
我的路由器的片段:
routes: {
'project/:id: 'showtasks'
},
showtasks: function(id) {
Event.trigger('tasks:show', id);
}
任务集的片段
initialize: function() {
Event.on('tasks:show', this.show, this);
},
show: function() {
var task = this.collection.get(id);
var taskView = new App.Views.Task({ model: task });
this.$el.append(taskView.render().el);
}
集合
var tasks = new App.Collections.Tasks([
{
id: 1,
title: 'First Task',
content: 'Lots of Content...'
},
{
id: 2,
title: 'Second Task',
content: 'Lots of Content...'
},
{
id: 3,
title: 'Third Task',
content: 'Lots of Content...'
}
]);
var tasksView = new App.Views.Tasks({ collection: tasks });
答案 0 :(得分:2)
Backbone视图的几个好的设计模式是:
多次调用render
方法不应有任何副作用。它应该正确呈现。
在渲染中使用append
时,基本上是在渲染方法中设置视图的流程,这应该基本上是视图模板的责任。
所以我建议你应该使用这个&gt;
this.$el.html(taskView.render().el);
如果您有子视图,这将完全正常,但是您会遇到问题。对于read this - (basically this whole answer is a shameless ripoff of this article :P )