我是Backbone和MongoDB的新手。我遇到了破坏模型的问题(由MongoDB支持)。我相信它与MongoDB“文档”使用异常_id
属性并且默认情况下未与Backbone连接这一事实有关。我试过设置idAttribute: '_id'
似乎无法解决问题。
示例Mongo文档如下所示:
{
_id: Object
$oid: "527303e82f3504ba5bf4b21f"
__proto__: Object
feeling: "ok"
location: "california"
name: "Kevin"
}
models.coffee
class Models.Campaign extends Backbone.Model
urlRoot: "http://localhost:4567/api/campaigns"
# setting idAttribute: '_id' causes issues rendering the Backbone collection
controller.coffee
...
model.destroy() #=> only removes the item from the dom but does not make a DELETE request
我可以将id
传递给destroy()函数吗?
有没有人建议如何正确地将Backbone与MongoDB连接起来,而不必单击大量的内置Backbone功能?
答案 0 :(得分:1)
如果您在模型中添加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
而不是使用_.pick
制作半版并修改该副本,则可能没问题,但parse
不会技术上拥有response
所以改变它是不礼貌的,可能会产生令人惊讶的副作用。好习惯等。
然后,当Backbone尝试将服务器的数据转换为模型时,它最终会使用:
{
id: "527303e82f3504ba5bf4b21f",
feeling: "ok",
location: "california",
name: "Kevin"
}
每个人都应该感到高兴:
_id
。$oid
,您无需将idAttribute
设置为任何特殊内容。id
,并且所有标准机器都将使用BSON ObjectId作为模型的唯一标识符。这个简单的方法可以在DELETE /api/campaigns/527303e82f3504ba5bf4b21f
时向您提出model.destroy()
请求。