Основа: создание коллекции из JSON - PullRequest
16 голосов
/ 16 января 2012

Я пытаюсь загрузить JSON (из json_encode в php) в коллекцию 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) { }
});

Ошибка:

Uncaught TypeError: Невозможно использовать оператор «in» для поискадля 'id' в

Аналогичная проблема: Backbone: извлечение коллекции с сервера

Мой JSON определенно имеет правильный формат, я что-то упустилочевидно?Я попытался использовать просто id: «1», а не «id» с тем же результатом.

Ответы [ 3 ]

13 голосов
/ 16 января 2012

Ваш JSON все еще в строковом формате.Передайте его в JSON.parse перед его назначением:

var myJSON = JSON.parse('[{"id":1,"name":"some name","description":"hmmm"}]');
3 голосов
/ 16 января 2012

Вы забыли хеш defaults в вашей модели.

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

См. Документацию

0 голосов
/ 04 мая 2013

, поэтому я, возможно, упускаю точку полностью, но проблемы, похоже, заключаются в «одинарных кавычках» вокруг массива.То есть это:

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