我的 Backbone 应用程序正在与构建在 MongoDB 之上的 REST API 进行通信,因此我的对象的“自然”ID 确实是 MongoIDs
。当序列化为 JSON 时,它们看起来像:
"_id":{"$id":"505099e998dee4db11000001"}
Backbone documentation提到您可以为 Backbone 模型的 id 属性指定除 id
之外的另一个名称(使用 idAttribute
),但是,由于 MongoID 的字符串表示是嵌套的,只需使用 idAttribute : '_id'
对直接使用 JSON 没有帮助。
除了在服务器端重写属性之外,有没有办法解决这个问题?
更新:
这是我在服务器端做的事情:
$m = new Mongo();
$posts = $m->mydatabase->posts->find();
$out = array();
foreach ($posts as $post) {
$out[] = $post;
}
echo json_encode($out);
我知道我可以这样做 $post['id'] = (string) $post['_id']; unset($post['_id']);
但这正是我想要避免的!
最佳答案
这听起来像是 parse()
的一个很好的例子.
由于您的 Mongo JSON 最终发送:
"_id":{"$id":"505099e998dee4db11000001"}
为什么不使用 Backbone 解析来正确命名传入数据?
parse: function(response) {
response.id = response._id['$id'];
delete response._id;
return response;
}
或者类似的东西。同样,由于 Backbone 会将 id 作为带有“id”的 JSON 发送,因此您的服务器可能会采用它并以另一种方式“翻译”它。
如果您想使用不同的 id attribute , _id
,您只需将上面的解析替换为以下代码:
idAttribute: '_id',
parse: function(response) {
response._id = response._id['$id'];
return response;
}
最适合你的。 :-)
关于php - 如何让 Backbone 和 MongoDB 的 id 无缝工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12390553/