0

我是 Backbone 和 MongoDB 的新手。我在销毁模型(由 MongoDB 支持)时遇到问题。我认为这与 MongoDB“文档”使用异常_id属性并且默认情况下未与 Backbone 连接这一事实有关。我尝试过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

控制器.coffee

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

我可以将一个传递id给 destroy() 函数吗?

有没有人建议如何正确地将 Backbone 与 MongoDB 连接起来,而无需修补大量内置的 Backbone 功能?

4

1 回答 1

1

我认为,如果您将 a 添加parse到模型中以整理从服务器获取的令人困惑的数据,您将拥有更轻松的时间。您不需要也不关心_id,您确实关心$oid,而且 Backbone 更愿意与id物业合作;parse你可以在你的模型中用一个简单的方法来整理这三个:

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

演示:http: //jsfiddle.net/ambiguous/pn773/

如果您parse修改而不是使用和修改该副本response制作半副本,那么您可能会很好,但是,在技术上并不拥有,因此更改它是不礼貌的,并且可能会产生令人惊讶的副作用。好习惯等等。_.pickparseresponse

然后当 Backbone 尝试将服务器的数据转换为模型时,它将最终使用:

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

每个人都应该高兴:

  1. Backbone 不会看到无关紧要的内容_id
  2. 骨干不会看到$oid,你不需要设置idAttribute任何特别的东西。
  3. Backbone 将看到id它所期望的结果,并且所有标准机器都将使用 BSON ObjectId 作为模型的唯一标识符。

简单的方法应该会DELETE /api/campaigns/527303e82f3504ba5bf4b21f在您model.destroy().

于 2013-11-01T03:12:57.700 回答