Javascript 路由器中的双视图渲染
当我每次导航到domain.com/#notes时,就会出现一个双视图,并且任何事件都会被触发多次。我认为这是因为每次访问domain.com时,都会创建一个新视图(旧视图仍然存在)。相反,您可以只创建一次视图,然后在showNotes上调用render吗 另外,作为旁注,fetch()是一个异步调用,因此您必须等待,直到通过传入回调(成功函数)并在那里进行计算来获取数据 大概是这样的:Javascript 路由器中的双视图渲染,javascript,backbone.js,Javascript,Backbone.js,当我每次导航到domain.com/#notes时,就会出现一个双视图,并且任何事件都会被触发多次。我认为这是因为每次访问domain.com时,都会创建一个新视图(旧视图仍然存在)。相反,您可以只创建一次视图,然后在showNotes上调用render吗 另外,作为旁注,fetch()是一个异步调用,因此您必须等待,直到通过传入回调(成功函数)并在那里进行计算来获取数据 大概是这样的: var Router = Backbone.Router.extend({ routes:{
var Router = Backbone.Router.extend({
routes:{
'notes': 'showNotes',
"note/:noteId": "openNote"
},
showNotes: function() {
new app.NotesView;
},
openNote: function(noteId) {
var NotesCollection = new app.NotesCollection();
NotesCollection.fetch();
var view = new app.NotesView({
currentModel : NotesCollection.get(noteId)
})
}
});
})) 你能给我看一下有关视图的代码吗。。另外,如果您对单个注释和所有注释都有单独的视图,这也是一个更好的主意。这样,您的代码可以更加模块化。我已经为每个注释创建了一个单独的视图,@Civ指出的问题是,每次我在路由器中创建一个新视图时,都会创建一个新的事件处理程序。
var notesView = new app.NotesView;
var Router = Backbone.Router.extend({
routes:{
'notes': 'showNotes',
"note/:noteId": "openNote"
},
showNotes: function() {
notesView.render(); // or append notesView.$el into the dom somewhere
},
openNote: function(noteId) {
var NotesCollection = new app.NotesCollection();
NotesCollection.fetch({
success: function(){
notesView.setModel(NotesCollection.get(noteId); // make this method youself
}
});
}