双视图在路由器中呈现

时间:2013-08-23 21:06:19

标签: javascript backbone.js

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)
        })

    }
});

当我每次导航到domain.com/#notes时出现问题,出现双重视图,并且多次触发任何事件。

1 个答案:

答案 0 :(得分:1)

我认为这是因为每次去那里,你都会创建一个新视图(旧视图仍然存在)。相反,您可以只创建一次视图并在showNotes上调用render吗?

另外,作为旁注,fetch()是一个异步调用,所以你必须等到通过传入一个回调(成功函数)并在那里进行计算来获取数据。

这样的事情:

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
        }
    });
}

});