2013-10-27 63 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