Я использую Backbone с моим RESTful JSON API для создания приложения, которое работает с постами и их комментариями. Я пытался заставить Backbone Relational работать, но столкнулся с проблемами с моей отложенной загрузкой.
Я загружаю список постов, без соответствующих комментариев. При щелчке сообщения в списке я открываю представление, которое получает полный текст сообщения, включая комментарии и отображает его.
У меня есть 2 Backbone.RelationModels, сообщения и комментарии. Отношение поста к комментарию устанавливается следующим образом: `
relations: [{
type: Backbone.HasMany,
key: 'comments',
relatedModel: 'Comment',
includeInJSON: true, // don't include it in the exporting json
collectionType: 'Comments'
}]
Теперь проблема, с которой я сталкиваюсь, состоит в том, что отношения инициализируются, как только я получаю свой список, который еще не содержит комментариев. Я загружаю полные данные позже, выбирая модель по ее URI. Однако отношения, похоже, не инициализируются повторно, вызывая Posts.get (1) .get ('comments') возвращает пустую коллекцию Comments!
Кто-нибудь знает, как мне лучше всего решить эту проблему? Данные есть, кажется, что коллекция комментариев не обновляется.
Редактировать: я могу сделать так, чтобы модель Post связывала ее изменения: комментарии к себе, что обновляет коллекцию. Однако я не могу найти надежный способ получить исходные комментарии «JSON», поскольку this.get («comments») возвращает коллекцию комментариев.
Примечание. В моей коллекции я анализирую JSON, чтобы он работал с моим API, с помощью следующего кода:
parse: function(response) {
var response_array = [];
_.each(response, function(item) {
response_array.push(item);
});
return response_array;
}
Это потому, что JSON, возвращаемый моим API, возвращает объект с индексированными ключами (ассоциативный массив) вместо собственного JSON-массива.
{
"id" : "1",
"title" : "post title",
"comments" : {
"2" : {
"id" : "2",
"description": "this should solve it"
},
"6" : {
"id" : "6",
"description": "this should solve it"
}
}
}
Спасибо большое! Пожалуйста, задавайте любые вопросы, я уверен, что где-то был расплывчатым!