从不同的路径灰烬数据负荷模型
问题描述:
我有路线后端:从不同的路径灰烬数据负荷模型
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,它返回一个模型数组,但它期望标准化的有效载荷。在将它传递给pushMany之前,对json进行规范化的正确方法是什么?
我不能在适配器中替换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');
这似乎长篇大论这种简单的用例。任何想法,改进?我错过了什么吗?
答
如果可能的话,你应该看看转向Ember Data 1.0 beta。事情发生了很大变化。
在最新版本中,您可以覆盖Adapter
中的pathForType
功能。
https://github.com/emberjs/data/blob/master/TRANSITION.md#underscored-api-endpoints
这TRANSITION
文件是为了使更新非常有帮助。
我在边缘。我无法重写'pathForType',因为我也想从'/ movies'加载。还有其他收集操作,如“movies/top_rated”或“movies/most_viewed”。 – wildchild