2013-10-27 61 views
2

我有路线后端:从不同的路径灰烬数据负荷模型

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'); 

这似乎长篇大论这种简单的用例。任何想法,改进?我错过了什么吗?

回答

1

如果可能的话,你应该看看转向Ember Data 1.0 beta。事情发生了很大变化。

在最新版本中,您可以覆盖Adapter中的pathForType功能。

https://github.com/emberjs/data/blob/master/TRANSITION.md#underscored-api-endpoints

TRANSITION文件是为了使更新非常有帮助。

+0

我在边缘。我无法重写'pathForType',因为我也想从'/ movies'加载。还有其他收集操作,如“movies/top_rated”或“movies/most_viewed”。 – wildchild