2012-07-10 175 views
5

我在具有以下佈局的單頁的應用程序工作:管理與路由器意見Backbone.js的

Layout of the app

我使用Backbone.js的路由器來管理負載上的元素屏幕:

var AppRouter = Backbone.Router.extend({ 
    routes: { 
     ""    : "list", 
     "content1"  : "content1", 
     "content1/cont3": "cont3" 
    }, 

    list: function() { 
     var list = new List().render().$el; //view 
     $("#List").html(list); 
    }, 

    content1: function(){ 
     var cont1 = new Content1().render().$el; //view 
     $("#Content1").html(cont1); 
    }, 

    content3: function(){ 
     var cont3 = new Content3().render().$el; //view 
     $("#Cont3").html(cont3); 
    }   

}); 

每次我點擊在#List列表項,#內容1被產生,當我這樣做是對#內容1塊,#CONT3出現。

我面對的問題是,如果出於某種原因,例如當地址爲localhost/content1時刷新頁面; #List中的元素消失。

我希望#List中的內容在加載時始終存在,與URL的內容無關,以及#Content1中的內容。有沒有辦法使用骨幹路由器來實現這一點?

感謝

回答

4

你並不需要匹配1路< - > 1查看。
我的路線更改爲類似這樣:

「清單」: 「displayContent」,
「列表/:C1」: 「displayContent」,
「列表/:C1 /:C3」 :「displayContent」,

所以只有一個回調組織什麼視圖被渲染或不是。

displayContent:函數(C1,C3){

商店的內容1變量,並檢查是否已被或不呈現等

,看一下這個問題:How to handle initializing and rendering subviews in Backbone.js?

或者對於更復雜的應用程序,也許在Backbone頂部的佈局框架可以提供幫助,但我會建議您自己做些東西,直到您瞭解Backbone的工作方式。

https://github.com/tbranyen/backbone.layoutmanager
https://github.com/derickbailey/backbone.marionette

+0

格拉西亞斯@corbacho,我的工作我的方式解決這個解決方案,它給我的結果我的預期。 – rpabon 2012-07-11 07:41:09

+0

你能顯示代碼片段嗎? – 2013-02-25 22:05:12

0

我想你可以試試這個:

..... 
    list: function() { 
     var list = new List().render().$el; //view 
     $("#List").html(list); 
    }, 

    content1: function(){ 
     var cont1 = new Content1().render().$el; //view 
     $("#Content1").html(cont1); 
     //Pseudo code 
     if (listisempty){ 
      list();//If the list is empty, then the initialization list. 
     }; 
    }, 

.....