Backbone:从JSON创建集合

时间:2012-01-16 06:05:05

标签: javascript collections backbone.js json

我正在尝试将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”,结果相同。

3 个答案:

答案 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
  }
});

请参阅documentation

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