Наша команда изучает и принимает Ember для создания наших приложений, и это было удивительное путешествие. Это дошло до того, что мне нужно постепенно получать данные с бесконечным списком прокрутки, который автоматически извлекает следующую страницу, как только пользователь прокручивается до самой нижней части списка. Наша конечная точка REST ожидает, что заголовок Range будет передан для этого, иначе он вернет max 1000 записей.Передача заголовка «Range» в Ember
До сих пор я обнаружил, что я могу указать заголовок в нашей модели конкретного класса адаптера, как показано на следующем:
App.TaskAdapter = DS.RESTAdapter.extend({
headers: function() {
return {
'Range': 'items=0-9'
};
}
});
Поскольку диапазон должен изменяться в зависимости, на какой странице приложения необходимо загрузить следующий , я изменил класс быть похожим на это:
App.TaskAdapter = DS.RESTAdapter.extend({
pageIndex: 0,
numRecords: 10,
headers: function() {
var pageIndex = this.get('pageIndex');
var numRecords = this.get('numRecords');
var rangeValue = 'items=' + (pageIndex * numRecords) + '-' + (((pageIndex + 1) * numRecords) - 1);
return {
'Range': rangeValue
};
}.property().volatile()
});
App.TasksRoute = Ember.Route.extend({
...
refreshModel: function(pageIndex) {
this.adapter.set('pageIndex', pageIndex);
this.store.find('task');
},
...
});
с этой модификации, я надеялся, что я мог бы изменить pageIndex
и numRecords
, делая это в пути (что привело меня к инъекции App.TaskAdapter
в App.TasksRoute
). Тем не менее, я обнаружил, что this.adapter.set('pageIndex', pageIndex);
не устанавливает значение, как предполагалось, и это заставило меня думать, что адаптер создается (с фабрики?) Каждый раз, когда хранилище требуется для сбора данных. Возможно, я ошибаюсь.
Так как я не могу заставить это работать, у меня получился класс-помощник TaskAdapterConfig
(который вводится в маршрут), чтобы сделать это.
App.TaskAdapter = DS.RESTAdapter.extend({
pageIndex: 0,
numRecords: 10,
headers: function() {
var pageIndex = this.config.get('pageIndex');
var numRecords = this.config.get('numRecords');
var rangeValue = 'items=' + (pageIndex * numRecords) + '-' + (((pageIndex + 1) * numRecords) - 1);
return {
'Range': rangeValue
};
}.property().volatile()
});
App.TaskAdapterConfig = Ember.Object.extend({
pageIndex: 0,
numRecords: 10
});
App.TasksRoute = Ember.Route.extend({
...
refreshModel: function(pageIndex) {
this.adapterConfig.set('pageIndex', pageIndex);
this.store.find('task');
},
...
});
Мне интересно, есть ли лучший способ достичь этого?