Магистраль: создайте коллекцию из JSON - программирование
Подтвердить что ты не робот

Магистраль: создайте коллекцию из JSON

Я пытаюсь загрузить JSON (из php json_encode) в коллекцию JS Backbone. Я упростил проблему:

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' в

Сходная проблема: Магистраль: выборка коллекции с сервера

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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

Ответ 3

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

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