我正在尝试将JSON(来自php的json_encode)加载到Backbone JS集合中。我把问题简化为:
var myJSON = '[{ "id":"1","name":"some name","description":"hmmm"}]';
var myCollection = new MyCollection(myJSON, { view: this });
和
MyObject = Backbone.Model.extend({
id: null,
name: null,
description: null
});
MyCollection = Backbone.Collection.extend({
model: MyObject,
initialize: function (models,options) { }
});
错误:
未捕获的TypeError:无法使用'in'运算符在
中搜索“id”
类似问题:Backbone: fetch collection from server
我的JSON肯定看起来格式正确,我错过了一些明显的东西吗?我试图使用简单的id:“1”而不是“id”,结果相同。
答案 0 :(得分:13)
您的JSON仍然是字符串格式。在分配之前将它传递给JSON.parse:
var myJSON = JSON.parse('[{"id":1,"name":"some name","description":"hmmm"}]');
答案 1 :(得分:3)
您忘记了模型中的defaults
哈希值。
MyObject = Backbone.Model.extend({
defaults: {
id: null,
name: null,
description: null
}
});
答案 2 :(得分:0)
所以我可能完全忽略了这一点,但问题似乎是阵列周围的“单引号”。就是这样:
var myJSON = '[{ "id":"1","name":"some name","description":"hmmm"}]';
应该是:
var myJSON = [{ "id":"1","name":"some name","description":"hmmm"}];
Php,afik,不添加单引号,因此它应该像更改一行说的那样简单:
$my_js = "var myJSON = '" . json_encode($my_array_to_send)) . "';";
为:
$my_js = "var myJSON = " . json_encode($my_array_to_send)) . "; ";