2013-03-18 63 views
2

我是AngularJS的新手,我目前正在使用Django/Tastypie API構建一個webapp。這個Web應用程序的工作原理與職位和API調用(GET)看起來像:

{ 
    title: "Bootstrap: wider input field - Stack Overflow", 
    link: "http://stackoverflow.com/questions/978...", 

    author: "/v1/users/1/", 

    resource_uri: "/v1/posts/18/", 
} 

請求這些對象,我創建了嵌入宣佈類似以下資源的角度的服務:

Post: $resource(ConfigurationService.API_URL_RESOURCE + '/v1/posts/:id/') 

一切正常像一個魅力,但我想解決兩個問題:

  1. 如何正確替換author字段的值?換句話說,如何儘可能自動地請求每個參考字段?
  2. 如何緩存該值以避免在同一端點上進行多次調用?

再一次,我是angularJS的新手,我可能錯過了我對於$resource對象的理解。

謝謝, Maxime。

回答

1

關於問題一,我知道沒有微不足道的開箱即用解決方案。我想您可以使用自定義response transformers啓動附屬$資源請求,並將這些請求中的promises附加爲響應對象的屬性(代替URL)。最近版本的$資源工廠allow you to specify這樣一個變壓器用於$資源實例。您將委派全局默認響應轉換器($ httpProvider.defaults.transformResponse)來獲取您的實際JSON,然後替換屬性並從那裏啓動輔助請求。請記住,當委託這種方式時,即使文檔中只提到一個,我也會傳遞第一個TWO而不是ONE參數。

有沒有辦法知道什麼時候每一個最後的承諾已經完成,但我認爲你不會有任何代碼將取決於這種知識(因爲它是常見的,你的用戶界面只是綁定到零碎模型對象本身就是一個承諾,由原始HTTP請求返回)。

至於問題二,我不確定你是否指的是你的主對象(在這種情況下$ scope應該足以作爲保留引用的方法),或者你建議下載的這些輔助對象作爲在客戶端組裝聚合的手段。假設後者,我想你可以做一些事情,比如維護一個哈希關聯到你的$範圍內的對象的URL,並且你的子$資源請求上的成功函數更新這個字典。然後你可以讓我上面描述的響應轉換器首先檢查哈希,看看它是否已經獲得了所需的資源實例,只有當這樣的本地副本不存在時才從後端獲取$資源。

這是所有在客戶端組裝資源的一大堆工作(以及往返),因爲只需在應用程序層中組裝聚合並將其預先煮好即可。 REST對數據標準化沒有任何期望。

+0

我想你是對的。我會讓前端變得更容易,並「預先煮熟」:) 感謝您的回答,我想我因此開始拖延! – Maxime 2013-03-19 07:47:24

+0

很高興爲您服務,@Maxime。 – Jollymorphic 2013-03-19 14:45:04