2014-07-24 54 views
0

我正在使用AngularJS開發WebApp。我有兩個主要模型,旅程和地點。每個旅程都有一個開始和結束目的地。AngularJS中的資源非規範化數據

在服務器端,我只處理規範化的數據,即旅程和位置存儲在單獨的數據庫表中,每個旅程條目僅存儲其目的地的ID號。

在客戶端(在AngularJS中),我使用了兩個RESTful ngResources,一個用於旅程,另一個用於位置。同時裝入後,我填充用於顯示的位置數據,這樣的旅程不僅包含startLocation(ID),而且startLocationObject(位置數據)的行程是這樣的:

journey.startLocationObject = locations.byId(journey.startLocation); 

ById是一個簡單的查找函數,返回具有給定ID的位置。

現在,每次我在旅程中呼叫$ save,由於旅程被服務器響應覆蓋,位置數據丟失。因此,我必須再次使用位置數據重新填充行程。

有沒有更好的方法來解決這個問題?例如,防止ngResource覆蓋旅程對象?或者我錯過了Angular關係數據方面的一些東西?

感謝您的幫助, 最佳,鮑里斯

+0

這個REST實現有很多類似的問題。也許你會習慣於自己的自定義實現。 AFAIK你不能覆蓋那個行爲。 –

+0

您應該在服務器端實現一個視圖,以返回已經與其位置關聯的旅程。注意不要將數據庫表與REST資源混淆。 REST中的「R」代表「具有代表性」。在您的服務器上創建最適合客戶需求的表示。 –

+0

@Mike,我明白了,這意味着在服務器上填充數據。我試圖避免這種情況,以儘量減少網絡流量,但也許這是打開一罐蠕蟲。感謝您的回覆! –

回答

0

必須的工作方式是讓數據形成的服務器,並保持客戶端無狀態的。

由於這個原因,在REST應用程序中不鼓勵保持客戶端上的「旅程」數據。

旅程數據將來自服務器請求或在保存之前將旅程數據保存在其他變量/集合中。

+0

無狀態是緩存和本地存儲的離線使用的矛盾,不是嗎?我想我可能需要補充一點,然後我有一個本地狀態,無論如何,需要與服務器同步... –

+0

是的,在某些時候,客戶端需要保持請求之間的數據。 – jordiburgos