2016-04-08 12 views
1

を使用してBackandで複雑なオブジェクトを更新Backandを使用してAngularアプリにデータベースとREST APIを提供しています。

私はユーザーが複雑なオブジェクトを編集する機能を開発しています。複雑なオブジェクトはデータベース上で更新する必要があります。

オブジェクトはビット次のようになり、十分に簡単...:アップデート($ HTTP PUT)の呼び出しについて

obj = { 
    id: 1, // assigned by the db 
    name: "My List", 
    tasks: [ 
    { id: 1, desc: "Task 1" }, 
    { id: 2, desc: "Task 2" }, 
    ... 
    ] 
} 

、私はコードと$http呼び出しを最小限に抑えるためのショートカットとしてparams: { deep: true }を使用したいと思います。

PUTコマンドがデータベース内の「マスター」オブジェクトを更新する間、編集された「子」オブジェクトは更新されず、新しい子オブジェクトとして追加されるという問題があります。例えば

、私はマスターと子オブジェクトは1回の呼び出しで更新しようとします

$http({ 
    method: 'PUT', 
    url: baseUrl + 'lists/' + list.id, 
    params: { 
    deep: true 
    }, 
    data: { 
    id: 1, 
    name: "My To Do List", 
    tasks: [ 
     { id: 1, desc: "New Description for Task 1" }, 
     { id: 2, desc: "New Description for Task 2" } 
    ] 
    } 
}).then(....); 

データベースがない更新子オブジェクトを行い、それはそれらを追加します。ここで生成されるオブジェクトがデータベース内にある方法は次のとおりです。

list = { 
    id: 1, 
    name: "My To Do List", // Updated correctly 
    tasks: [ 
    { id: 1, desc: "Task 1" }, 
    { id: 2, desc: "Task 2" }, 
    { id: 3, desc: "New Description for task 1" }, // Added not updated 
    { id: 4, desc: "New Description for task 2" } // Added not updated 
    ] 
} 

私は、子オブジェクトのidのが正しいことを確認してきました。

これを簡潔に行う方法はありますか、複数の段階でそれをやることに辞職しましたか? deep = trueはPUTでも動作しますか? Backand docsには言及していません。あなたはBackandからオブジェクトを「GET」とき

答えて

3

Backandは、それがこのようなメタデータが含まれている彼らの

{ 
    __metadata: {id: "6"} 
} 

に応じて既存のオブジェクトを識別します。 メタデータIDを持たないオブジェクトを「PUT」すると、Backandはそれを新しいオブジェクトとして脅威にさらします。 したがって、最初に取得したものと同じ深いオブジェクトを使用するか、メタデータIDを追加してください。あなたがのparamsに

params: { 
    deep: true, 
    overwrite: true 
} 
を真の上書き=を追加する必要があり、「PUT」要求でタスクの子を削除するには

$http({ 
    method: 'PUT', 
    url: baseUrl + 'lists/' + list.id, 
    params: { 
    deep: true 
    }, 
    data: { 
    "__metadata": { "id": "1" }, 
    id: 1, 
    name: "My To Do List", 
    tasks: [ 
     { "__metadata": { "id": "1" }, id: 1, desc: "New Description for Task 1" }, 
     { "__metadata": { "id": "2" }, id: 2, desc: "New Description for Task 2" } 
    ] 
    } 
}).then(....); 

関連する問題