0

Backbone と MongoDB は初めてです。モデル (MongoDB によってサポートされている) を破棄する際に問題が発生しています。MongoDB_idの「ドキュメント」が異常な属性を使用し、デフォルトでバックボーンに接続されていないという事実と関係があると思います。idAttribute: '_id'問題を解決していないように見える 設定を試しました。

サンプルの Mongo ドキュメントは次のようになります。

{
  _id: Object
    $oid: "527303e82f3504ba5bf4b21f"
  __proto__: Object
  feeling: "ok"
  location: "california"
  name: "Kevin"
}

モデル。コーヒー

class Models.Campaign extends Backbone.Model
  urlRoot: "http://localhost:4567/api/campaigns"
  # setting idAttribute: '_id' causes issues rendering the Backbone collection

コントローラー.コーヒー

...
model.destroy() #=> only removes the item from the dom but does not make a DELETE request

iddestroy() 関数に渡すことはできますか?

大量の組み込みバックボーン機能にモンキーパッチを適用することなく、バックボーンと MongoDB を適切に接続する方法について誰かアドバイスがありますか?

4

1 に答える 1

1

parseモデルに を追加して、サーバーから取得する紛らわしいデータを整理すると、より簡単になると思います。あなたは を必要としないか気にしませんが_id、あなたは を気$oidにし、Backbone はidプロパティを操作することを好みます。parse次のように、モデル内でシンプルに 3 つすべてを整理できます。

parse: function(response) {
    var parsed = _(response).pick(
        'feeling',
        'location',
        'name'
    );
    parsed.id = response.$oid;
    return parsed;
}

デモ: http://jsfiddle.net/ambiguous/pn773/

ただし、そのコピーを使用して変更するセミコピーを作成するのではなく、parse変更した場合はおそらく問題ありませんが、技術的に所有していないため、変更するのは失礼であり、驚くべき副作用が発生する可能性があります。良い習慣などresponse_.pickparseresponse

次に、バックボーンがサーバーのデータをモデルに変換しようとすると、次のように動作します。

{
  id: "527303e82f3504ba5bf4b21f",
  feeling: "ok",
  location: "california",
  name: "Kevin"
}

そして誰もが幸せになるべきです:

  1. バックボーンは無関係なものを認識しません_id
  2. バックボーンは表示されず、特別なもの$oidを設定する必要はありません。idAttribute
  3. バックボーンはid期待どおりのように見え、すべての標準的な機械は BSON ObjectId をモデルの一意の識別子として使用します。

シンプルなメソッドはDELETE /api/campaigns/527303e82f3504ba5bf4b21fmodel.destroy().

于 2013-11-01T03:12:57.700 に答える