2011-12-20 23 views
2

我是新來的骨幹,我認爲其中一個偉大的事情是我可以訪問數據而無需返回到服務器。在我的應用程序的舊版本中,我使用jQuery.data將數據散列存儲在dom節點中。骨幹使用現有的模型數據,而不需要另一個電話到服務器

所以我有一個消息列表,當我點擊一條消息時,我想去一個顯示更多細節的視圖,但是我需要的所有細節都已經在原始列表中,所以我不'實際上需要另一次運行到服務器,我只想更新視圖。

然後,當我想回到列表,我不需要回到服務器,我只想回到原始列表。

我的路線看起來像這樣,我嘗試將'messages'變量傳遞給show函數,但它不適用於該函數。

我誤解了骨幹的能力嗎?

 
App.Routers.Messages = Backbone.Router.extend({ 
    routes: { 
     "":    "index", 
     "messages/:id":  "show" 
    }, 

    show: function(id){ 
     var message = new Message({ id: id}); 
     message.fetch({ 
      success: function(model, resp){ 

       new App.Views.Show({ model: message}); 
      }, 
      error: function(){ 
       new Error({message: "Hey!? Were'd it go? sorry I can't find your message"}); 
       window.location.hash = '#'; 
      } 
     }); 
    }, 

    index: function(){ 

     var messages = new App.Collections.Messages(); 
     message.fetch({ 
      success: function(){ 

        new App.Views.Index(messages); 

      }, 
      error: function(){ 
       new Error({ message: "did not find message :("}); 
      } 
     }); 


    } 

回答

2

你可以用骨幹來做你想做的事。

你必須做出的唯一改變是模型的集合設置爲一個全局變量訪問。

所以在指數函數替換

var messages = new App.Collections.Messages(); 

App.messages = new App.Collections.Messages(); 

,然後在播放功能取代

var message = new Message({ id: id}); 

var message = App.messages.get(id); 
+0

雖然我認爲你靠近保羅,遺憾的是,當我點擊一個消息,我得到的的console.log作秀App.messages.get(ID)的「未定義」。另外,在提供的代碼中,當返回到消息視圖時,我想我只是檢查消息的長度,如果<1,則設置獲取?出於某種原因,我想骨幹了這種管道 – pedalpete 2011-12-20 17:57:37

+0

的照顧,可能還與從服務器獲取檢索模型異步 – Paul 2011-12-20 18:40:37

-1

的問題是,路由器的工作原理完全一樣:路線,一旦你點擊了郵件/:ID查看它重新初始化一個信息模型等,如果你移動抓取到View的初始化方法和返回該視圖作爲所謂的單例(例如在你的應用程序中只初始化一次),你不需要再做一次服務器調用。

+0

有點讓你在說什麼,但什麼時候我需要做一個服務器調用該怎麼辦? ?我試圖回到之前沒有其他請求的頁面,但有時候我想要加載新數據。 – pedalpete 2011-12-22 17:21:15

相關問題