Я использую 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') возвращает пустую коллекцию комментариев!
Кто-нибудь знает, как мне лучше всего решить эту проблему? Данные есть, просто кажется, что коллекция комментариев не обновляется.
Изменить: я могу заставить модель 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"
}
}
}
Огромное спасибо! Пожалуйста, задавайте любые вопросы, я уверен, что я где-то был расплывчатым!