我有一个带有路由的后端:
resources :movies do
collection do
get :drafts
end
end
store.find('movie') 将从 /movies 加载,但我想从 /movies/drafts 加载。
查找器有“后缀”选项,因此我意识到我需要编写自定义查找器。任何人都可以发布一个例子吗?
我试过这段代码:
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之前标准化json的正确方法是什么?
我不能只替换适配器中的 buildURL,因为我也想使用默认 URL。
更新:
可能的解决方案:
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');
对于这种简单的用例,它似乎很冗长。有什么想法、改进吗?我错过了什么吗?