1

私はこのようにバックボーンリレーショナルを使用しています:

class window.Car extends Backbone.RelationalModel

class window.Person extends Backbone.RelationalModel
    relations: [{
        type: Backbone.HasOne
        key: 'car'
        relatedModel: Car
    }]

PersonViewサブビューを埋め込むもありCarViewます。

私の質問は、ユーザーが PersonView で [保存] をクリックしたときの最善の戦略は何ですか? 問題はsave、最初に車、次に人という 2 つのステップで発生することです。しかし、その人物で検証が失敗した場合はどうなるでしょうか? 保存はキャンセルされますが、車はすでに保存されています。

ここでは、バックボーンリレーショナルが最適なオプションではないのでしょうか? 代替案はありますか?

より一般的に言えば、深く埋め込まれたドキュメント (私は MongoDB を使用しています) で Backbone がうまく機能しないことにますます不満を感じています。はい、Todo アプリは素晴らしいですが、現実の世界はもっと複雑です! ガイダンスやチュートリアルをいただければ幸いです。

4

2 に答える 2

1

詳細を知らずに答えるのは難しいですが、ブラウザ側でリレーショナルモデルが必要ですか?

バックボーンは、安らかなアプリケーション向けに設計されています。サーバー側の API は安静ですか?

あなたの場合(そしてあなたが持っている制約を本当に理解していなくても)、次の実装を考えることができます。

サーバーでは、次の URI API:

[…]/carType/{carType}
[…]/persons/{person}
[…]/cars/{car}

この実装では、「car」は実際の物理オブジェクトを表し、「carType」は車のクラスを表します。「car」のバックボーン モデルには、「carType」の ID と「person」の ID が含まれています。「carType」と「person」のバックボーン モデルもあります。このように、「person」と「carType」を関連付けたい場合は、新しい「car」を作成し、サーバーに POST を送信します。「車」はそれ自体が独立したオブジェクトであるため (独自の URL を持っているため)、それをトランザクションとして操作できます (それがあなたが求めていることだと思います)。

それが役に立てば幸いです。答えは、あなたが実際にやろうとしていることからそれほど遠くありません.

于 2012-03-01T10:45:56.833 に答える
0

最善の保存戦略は、すべてをアトミックに(1つのステップで)保存することです。そうしないと、サーバーに1つのオブジェクトを保存できないということは、サーバーとクライアントの両方で他のオブジェクトを破棄する必要があるという、この種の問題が常に発生します。

これをサポートするために、Backbone-relationalは、ネストされたオブジェクトのシリアル化と逆シリアル化を優れた方法でサポートしています。

于 2012-03-16T14:08:58.667 に答える