2013-08-23 107 views
2
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時,每次我瀏覽一個雙視圖,並且任何事件被多次觸發。路由器中的雙視圖渲染

+0

你可以顯示有問題的視圖的代碼嗎?如果你有一個單獨的註釋和所有的註釋在一起是一個更好的主意。這樣你的代碼可以更模塊化 –

+0

我已經爲每個音符都有一個單獨的視圖,@Civ聲明的問題是每當我在路由器中創建一個新視圖時,就會創建一個新的事件處理程序。 –

回答

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

});

+0

正確你只是告訴我正確的軌道:)謝謝 –