Ember Data从不同路径加载模型

时间:2013-10-27 14:46:46

标签: ember.js ember-data

我有一个有路线的后端:

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

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

1 个答案:

答案 0 :(得分:1)

如果可能的话,你应该真正考虑转向Ember Data 1.0 beta。情况发生了很大的变化。

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

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

TRANSITION文档对于进行更新非常有帮助。