Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 路由器中的双视图渲染_Javascript_Backbone.js - Fatal编程技术网

Javascript 路由器中的双视图渲染

Javascript 路由器中的双视图渲染,javascript,backbone.js,Javascript,Backbone.js,当我每次导航到domain.com/#notes时,就会出现一个双视图,并且任何事件都会被触发多次。我认为这是因为每次访问domain.com时,都会创建一个新视图(旧视图仍然存在)。相反,您可以只创建一次视图,然后在showNotes上调用render吗 另外,作为旁注,fetch()是一个异步调用,因此您必须等待,直到通过传入回调(成功函数)并在那里进行计算来获取数据 大概是这样的: var Router = Backbone.Router.extend({ routes:{

当我每次导航到domain.com/#notes时,就会出现一个双视图,并且任何事件都会被触发多次。

我认为这是因为每次访问domain.com时,都会创建一个新视图(旧视图仍然存在)。相反,您可以只创建一次视图,然后在showNotes上调用render吗

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

大概是这样的:

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