2

私はmongoLabを使用していますが、モデルIDは次のようになります。

"_id": {
  "$oid": "50f9a0f5e4b007f27f766cf3"
},

を使用しidAttributeてモデルIDをに設定していますが、_idモデルを更新しようとするまではすべて正常に機能します。

_idモデルに属性が存在するため、挿入しようとするとエラーが発生します。

属性から属性を削除する必要があり_idますか?私はバックボーンの魔法が属性を適切にクリーンアップするだろうという仮定の下にありました

4

2 に答える 2

2

_id属性を削除する必要があります。

MongoLab REST APIでは、IDはデータペイロード自体の一部ではありませんが、すべてのバックエンドに当てはまるわけではありません。Backboneにとって、IDがペイロードに存在する必要があると想定する方が、存在しないと想定するよりもおそらく理にかなっています。

そうは言っても、BackboneにペイロードからIDを自動的にクリーンアップさせる本当に良い方法はありません。モンキーパッチを適用したり、コードを書き直したりしない最善の策は、おそらくオーバーライドすることです。これは次のModel#toJSONようなものです。

Backbone.Model.prototype.toJSON = function (options) {
  var attrs = _.clone(this.attributes);
  // In this case you'd have to pass `includeId: true` to `toJSON` when you
  // actually *want* the _id in the output.
  return options && options.includeId ? attrs : _.omit(attrs, '_id');
};

また、次のようなモンキーパッチ同期を行うこともできます。

var sync = Backbone.sync;
Backbone.sync = function (method, model, options) {
  options || (options = {});
  // if options.attrs is present, Backbone will use it over dumping toJSON
  if (!options.attrs) options.attrs = _.omit(model.attributes, '_id');
  return sync.call(Backbone, method, model, options);
};
于 2013-01-19T02:51:13.847 に答える
0

javascriptで_idがnullに変換されるのと同じ問題がありました..次のようなことをしなければなりませんでした。

 var myModel = Backbone.Model.extend({
   parse: function(response){
     var response = response.whatever;
     response.id = response.null;
     delete response.null;
     return appointment;
     }
  });

またはコレクションの場合

systems.forEach(function(system){
    console.log(system);
    system.id = system.null;
    delete system.null;
});
于 2013-04-16T20:25:13.650 に答える