1

如果用戶書籤,或分享下面的網址,如何應該我一個頁面Backbone.js的應用程序(使用Backbone.Router)去爲了渲染整個視圖檢索所需要的數據?Backbone.js的自舉嵌套資源

http://mydomain.example.com/menus#/menus/99/items/33/ingredients

如果用戶書籤http://mydomain.example.com/menus我可以很容易地引導菜單的第一頁。

# Inline before </body>, in a <script> block 
Menus.reset(<%= @menus.to_json %>); 

但在我上面提到,有需要引導的3層,但因爲這是#hashtag導航,服務器不知道要引導菜單,菜單的情況下:menu_id,項目,項目:ITEM_ID和成分的第一頁。

# It would look like the following on a real page 
# http://mydomain.example.com/menus/99/items/33/ingredients 
# please see past the invalid syntax 
Menus.reset(<%= @menus.to_json %>); 
var menu = Menus.get(99); 
menu.items.reset(<%= @menus.find(99).items.find(:all).to_json %>); 
var item = Menus.items.get(33); 
item.ingredients.reset(<%= @menus.find(99).items.find(33).ingredients.find(:all).to_json %>); 

是否有其他人用來完成此操作的模式?你能理解這個嗎?

我強烈希望創建一個引導控制器,其唯一目的是獲取繪製任何頁面所需的所有模型和集合。/bootstrap?path =/menus/99/items/33/ingredients,然後返回一些jsonp到調用者頁面http://mydomain.example.com/menus#/menus/99/items/33/ingredients

在此先感謝。

回答

1

如果我正確理解你的問題,你有其中一個深層鏈接到您的應用程序的中間打一個視圖不能構建合理的問題,因爲沒有加載數據的問題。

我想在這裏你需要認識到,路由和視圖之間不需要是1:1的對應關係。

所以當路由器檢測到這種情況,它可以顯示一個通用的「負荷」的觀點,開始獲取數據,然後當數據到達,顯示預期的看法。

(這種機制也可以鏈接 - 所以例如,您可能想顯示登錄視圖,然後加載視圖,那麼最終的視圖)。

所以我可能有一個實用功能,像這樣:

awaitFoos = function (foos, callback) { 
    var loadingView = new CommonLoadingView(); 

    if (foos.isFetched) { 
    callback(); 
    } else { 
    this.showPageView(loadingView); 

    foos.fetch({success: callback}); 
    } 
}; 

然後在路由器,我會用這樣的:

goFooView: function (fooid) { 
    var self = this; 

    this.appView.awaitFoos(function() { 
    var model = self.getFoo(fooid), 
     view = new FooView({model: model}); 

    self.appView.showPageView(view); 
    }); 
} 
+0

我調升你的答案,因爲這是我現在在做什麼(類似)的#/菜單/ 99所以它絕對不會出錯的(在我看來):) 但它本身借給一個嵌套回調地獄#/菜單/ 99/items33 /成分 –

+0

它確實。一種方法(我還沒有嘗試過)會使用某種形式的promise /異步庫(例如JQuery promise,node-promise或async [https://github.com/caolan/async])。 – stusmith

+0

我會給一個承諾庫一個漩渦。感謝這個想法。也許我會創建兩個路由器。一個僅用於初始頁面加載(think window.onload)來加載頁面(#menus/99/items/33/ingredients)所需的所有數據,然後用於用戶瀏覽應用程序的另一個路由器。我打算保持這個問題的公開性,並希望有更多的想法進來。我無法想象我會成爲唯一有此問題的人。謝謝! –