php - 如何让 Backbone 和 MongoDB 的 id 无缝工作?

标签 php mongodb backbone.js

我的 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/

相关文章:

php - 我如何从单个页面中删除轮播

javascript - 使用 PHP 在服务器端获取 Javascript/浏览器渲染元素

json - 将 JSON 文件导入 mongos

javascript - 将 Backbone.Collection 用于分页列表?

php - 从 nginx 中的不同位置提供 php 文件

php - API安全问题

sql - Azure 在代码中创建数据库

node.js - 在 mongodb 中查找 key 何时未知

javascript - 主干保存 : "success" not getting called

validation - 使用 Backbone.js 验证时如何处理异步调用(特别是唯一性)