#javascript #backbone.js
#javascript #backbone.js
Вопрос:
Я действительно не уверен, что я делаю неправильно, но когда я создаю fetch
и регистрирую ответ, я вижу 5 объектов, но когда я выхожу из данных в представлении, где я прослушиваю событие синхронизации коллекции, из системы выходит только 1 объект? Мои данные хранятся в global dataStore object
as dataStore.videos
, кто-нибудь объяснит, где я могу ошибаться?
VideoSearchCollection.js
getVideos: function(searchTerm) {
this.searchTerm = searchTerm;
this.fetch();
},
parse: function(response) {
console.log('this is response.items: ', response.items); // logs 5
return response.items;
}
SearchResultsView.js
initialize: function() {
// listens to a change in the collection by the sync event and calls the render method
this.listenTo(dataStore.videos, 'sync', this.render);
console.log('This collection should look like this: ', dataStore.videos);
},
render: function() {
console.log('inside render', dataStore.videos); // logs 1??
var self = this,
gridFragment = this.createItems();
this.$el.html(gridFragment);
return this;
},
Мои данные
Ответ №1:
Идентификатор имеет значение. Похоже, что ваш ответ сервера возвращает элементы, у которых нет идентификатора, поэтому Backbone объединяет их все в один.
Неправильный ответ сервера:
{"name","dan 1"}
{"name","dan 2"}
Правильный ответ сервера:
{"name","dan 1", id: 1}
{"name","dan 2", id: 2}
Комментарии:
1. о да, когда я смотрю на свои данные, там нет фактических идентификаторов, я прикрепил скриншот своих данных в сообщении выше. что я могу с этим поделать?
2. Как я уже говорил, идентификатор имеет значение. В вашем случае id — это объект, Backbone ожидает, что ID будет строкой или уникальным числом. Можете ли вы изменить код сервера, чтобы возвращать VideoID в качестве идентификатора? если нет, в функции синтаксического анализа для вашей модели map id = как VideoID, что-то вроде этого.
3. это данные, возвращающиеся из youtube api, поэтому я не могу их обновить, я попробую проанализировать модель, спасибо!