主干:从JSON创建集合

Backbone: Create collection from JSON

本文关键字:创建 集合 JSON 主干      更新时间:2023-09-26

我正试图将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) { }
});

错误:

未捕获的类型错误:无法使用"in"运算符在中搜索"id"

类似问题:主干:从服务器获取集合

我的JSON格式确实正确,我是不是遗漏了一些明显的东西?我尝试过简单地使用id:"1",而不是"id",结果相同。

您的JSON仍然是字符串格式。在分配之前将其传递给JSON.parse:

var myJSON = JSON.parse('[{"id":1,"name":"some name","description":"hmmm"}]');

您忘记了模型中的defaults哈希。

MyObject = Backbone.Model.extend({
  defaults: {
    id: null,
    name: null,
    description: null
  }
});

请参阅文档

所以我可能完全没有抓住要点,但问题似乎是数组周围的"单引号"。也就是说,这个:

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)) . ";  ";