У меня есть бэкенд с маршрутами:модель нагрузки Ember данные из различных путей
resources :movies do
collection do
get :drafts
end
end
store.find («кино») будет загружать из/кино, но я хочу, чтобы загрузить из/фильмов/проектов.
Существует опция «суффикс» для искателей, поэтому я понял, что мне нужно написать пользовательский поиск. Может ли кто-нибудь отправить пример?
Я попробовал этот код:
App.Movie.reopenClass( {
findDrafts: function(store) {
$.getJSON('/movies/drafts', function(payload) {
store.pushPayload('movie', payload);
});
return store.all('movie');
}
})
Но #pushPayload никогда не возвращает массив моделей, таким образом, я использую store.all, но он возвращает все объекты в хранилище. Мне нужны только что извлеченные модели по специальному запросу ajax.
Существует также store.pushMany, который возвращает массив моделей, но он ожидает нормализованной полезной нагрузки. Каков правильный способ нормализовать json, прежде чем передать его pushMany?
Я не могу просто заменить buildURL в адаптере, потому что я тоже хочу использовать URL-адреса по умолчанию.
UPDATE:
Возможное решение:
App.Store = DS.Store.extend({
revision: 11,
findAllByUrl: function(type, url) {
var self = this;
var promise = Ember.Deferred.create();
$.getJSON(url, function(payload) {
var serializer = self.serializerFor(type);
payload = serializer.extractArray(self, self.modelFor(type), payload);
var objects = self.pushMany(type, payload);
promise.resolve(objects);
});
return promise;
}
});
var records = this.get('store').findAllByUrl('movie', '/movies/drafts');
кажется, слишком разговорчивым для такого простого случая использования. Любые идеи, улучшения? Я что-то упускаю?
Я на краю. Я не могу переопределить 'pathForType', потому что я также хочу загрузить из'/movies'. А также из других коллекционных действий, таких как 'movies/top_rated' или' movies/most_viewed'. – wildchild