2011-10-25 7 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

私が正しく理解していれば、フォルダのリストは永久に表示されるはずです。また、アプリケーションには2つの大きなビュー、フォルダのリスト、および内容があります。フォルダのリストは常に表示する必要があります。

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