jul*_*n_c 12 php mongodb backbone.js
我的Backbone应用程序正在与构建在MongoDB之上的REST API进行通信,因此我的对象的"自然"ID确实如此MongoIDs
.当序列化为JSON时,它们看起来像:
"_id":{"$id":"505099e998dee4db11000001"}
Run Code Online (Sandbox Code Playgroud)
该骨干文件中提到,您可以用比指定另一个名称id
为(使用骨干模型的id属性idAttribute
),然而,作为MongoIDs'字符串表示嵌套,只是用idAttribute: '_id'
在直接消费JSON没有帮助.
除了重写服务器端的属性之外,有没有办法解决这个问题?
更新:
这是我在服务器端做的事情:
$m = new Mongo();
$posts = $m->mydatabase->posts->find();
$out = array();
foreach ($posts as $post) {
$out[] = $post;
}
echo json_encode($out);
Run Code Online (Sandbox Code Playgroud)
我知道我可以做类似的事情,$post['id'] = (string) $post['_id']; unset($post['_id']);
但这正是我想要避免的事情!
jmk*_*142 16
这听起来像是一个很好的例子parse()
.
由于您的Mongo JSON最终发送:
"_id":{"$id":"505099e998dee4db11000001"}
Run Code Online (Sandbox Code Playgroud)
为什么不使用Backbone解析来正确命名传入数据?
parse: function(response) {
response.id = response._id['$id'];
delete response._id;
return response;
}
Run Code Online (Sandbox Code Playgroud)
或类似的东西.同样,由于Backbone将使用'id'将ID作为JSON发送,因此您的服务器可能会采用该方法并以另一种方式"翻译"它.
如果你想使用一个不同的id属性,_id
你就只需更换与此代码上面的解析:
idAttribute: '_id',
parse: function(response) {
response._id = response._id['$id'];
return response;
}
Run Code Online (Sandbox Code Playgroud)
什么都适合你.:-)
小智 5
最好在浏览器中进行转换,以便从服务器上移除计算.所以你想要创建一个基本MongoModel,然后你可以从MongoModel而不是Backbone.Model扩展.
MongoModel = Backbone.Model.extend({
// this handle conversion between the mongo's _id and backbone id
// this is best done on the client side to alleviate server load
//_id : { "$oid" : ... } <--> id
parse : function (response) {
response.id = response._id.$oid;
delete response._id;
return response;
},
toJSON : function () {
var
json = Backbone.Model.prototype.toJSON.apply(this);
json._id = {'$oid':json.id};
delete json.id;
return json;
}
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2946 次 |
最近记录: |