2011-10-25 49 views
3

在這裏呈現的觀點是我的主幹應用Backbone.js的:當導航路線

  • 顯示該用戶已創建
  • 顯示一個文件夾的內容時,文件夾是文件夾列表的要求點擊

這裏是我是如何實現它。

AppRouter = Backbone.Router.extend({ 
    routes: { 
     '': 'home', 
     'get/:name/:id': 'contents' 
    }, 

    home: function() { 
     // show list of folders 
    }, 

    contents: function(name, id) { 
     // show contents of clicked folder 
    } 
}); 

這種做法是給我的問題,因爲當我點擊一個文件夾中,這樣就可以得到保存在瀏覽器歷史記錄,是結構「domain.com#GET /文件夾/ 1`的。如果我碰巧這個URL粘貼在瀏覽器的地址欄中的文件夾列表將不會被渲染,因爲它不匹配的路由。

難道是在路由器的initialize功能來顯示文件夾列表中選擇一個明智的策略?可能會創建一個頁面視圖來檢查文件夾是否已被顯示或不顯示?

回答

5

如果我理解正確,文件夾列表中應永久所示。而你的應用程序有兩個大視圖,文件夾列表和內容。並且必須始終顯示文件夾列表。

var AppRouter = Backbone.Router.extend({ 
    // it's better to use REST names than custom ones 
    routes: { 
    '': 'index', 
    'get/:id/:name': 'show' 
    }, 

    initialize: function(options) { 
    this.folders = new Folders(options.folders); // folders is your Backbone.Collection 
    // always show the FoldersView, something like 
    // new FoldersView({collection: this.folders, el: $('the folders container')}) 
    }, 

    index: function() { 
    // probably clear the contents area, something like 
    // $("#content").html('') 
    } 

    show: function(id, name) { 
    var folder = this.folders.get(id); 
    // create a view for this folder 
    // and render it in the content area, something like 
    // view = new FolderView(model: folder) 
    // $("#content").html(view.render().el) 
    } 
})