3

バックエンドでRESTful APIを使用するJavascript Webアプリケーション(SPA)に取り組んでいます。クライアント側のデータコンテキストで、オブジェクトをモデル グラフに追加し、グラフ全体を一度にサーバーに送信したいと考えています。

次の例を想定します。

私のモデルには、それ自体がプロパティとしての配列を持つPersonオブジェクトがPhoneNumbersあります。ここで、編集用のPersonfrom API をロードし、モデルにマップします。にいくつかの電話番号オブジェクトを追加したいとしますPhoneNumbers。このために、たとえば{"id": 0, "number": 6536652226}id がゼロの各数値をクライアント モデルに追加し、ユーザーが [保存] をクリックしたときにグラフ全体をサーバーに送信します。サーバーでは、ID がゼロのオブジェクト (新しいオブジェクト) を、自動インクリメントされた ID を持つデータベースに追加します。

私はチュートリアルに基づいてプロジェクトを行っています。オブジェクトをコンテキストに追加するには、次のようにします。

                var items = {},
                    // returns the model item produced by merging json obj into context
                    mapJsonToContext = function (json) {
                        var id = mapper.getJsonId(json);
                        var existingItem = items[id];
                        items[id] = mapper.fromDto(json, existingItem); //returns the mapped obj
                        return items[id];
                    },
                    add = function (newObj) {
                    items[newObj.id()] = newObj;
                    }

問題は、この方法を使用すると、ID がすべてゼロであるため、クライアント側で新しく追加されたまだ保存されていないアイテムを ID で削除できないことです。

これを修正するための提案はありますか、それともまったく別のアプローチが必要ですか?

4

2 に答える 2

2

まず、私が見つけた 2 つの小さな誤解:

1)「連想配列」を忘れてください。数値配列は、あなたが持っている唯一の種類の配列です。他の構成要素は単なる「オブジェクト」です (これは PHP ではありません)。

2) JSON の場合は、オブジェクトではなく文字列です。

それ以外に、まだ追加されていないアイテムを一意に識別するためにそのような値を使用しないとすぐに、任意の値を使用して「新しい」を表すことができます (ただし、私はおそらくnullではなく使用します)。0たとえば、これは問題ありません。

[
    {"id": 0, "number": "6536652226"},
    {"id": 0, "number": "9876543210"},
    {"id": 0, "number": "0123456789"}
]

これではありません:

// WRONG!!!!
{
    0: "6536652226",
    0: "9876543210",
    0: "0123456789"
}

}

もちろん、ID がない場合は、ID で番号を見つけることはできません。以下を選択する必要があります。

  • 生成された ID を DB から取得し、ローカル データを更新します
  • 番号で削除
于 2013-03-04T15:59:08.917 に答える
0

localId新しく作成されたクライアント側オブジェクトにプロパティを作成し、それをサーバーの返されたデータを調整するときにキーとして使用します。明らかに、サーバーはこれを返す必要がありlocalIdます。

于 2013-03-04T15:57:53.443 に答える