简体   繁体   English

来自不同路径的Ember数据加载模型

[英]Ember Data load models from different paths

I have a backend with routes: 我有一个路线的后端:

resources :movies do
  collection do
    get :drafts
  end
end

store.find('movie') will load from /movies, but I want to load from /movies/drafts. store.find('movie')将从/ movies加载,但我想从/ movies / drafts加载。

There is 'suffix' option for finders, thus I realized that I need to write custom finder. 查找器有“后缀”选项,因此我意识到我需要编写自定义查找器。 Could anyone post an example? 有人可以举一个例子吗?

I tried this code: 我尝试了这段代码:

App.Movie.reopenClass(  {
  findDrafts: function(store) {
    $.getJSON('/movies/drafts', function(payload) {
      store.pushPayload('movie', payload);
    });

    return store.all('movie');
  }
})

But #pushPayload never returns an array of models, thus I use store.all, but it returns all objects in a store. 但是#pushPayload永远不会返回模型数组,因此我使用store.all,但它会返回商店中的所有对象。 I need just retrieved models by custom ajax request. 我只需要通过自定义ajax请求检索模型。

There is also store.pushMany that returns an array of models, but it expects normalized payload. 还有store.pushMany返回一个模型数组,但它需要标准化的有效负载。 What is a proper way to normalize json before passing it to pushMany? 在将json传递给pushMany之前,对其进行规范化的正确方法是什么?

I can't just replace buildURL in adapter, because I want to use default urls too. 我不能只在适配器中替换buildURL,因为我也想使用默认URL。

UPDATE: 更新:

Possible solution: 可能的解决方案:

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

It seems to verbose for such simple use case. 对于这种简单的用例,似乎很冗长。 Any ideas, improvements? 有什么想法,改进吗? Am I missing something? 我想念什么吗?

If possible you should really look at moving to Ember Data 1.0 beta. 如果可能的话,您应该真正考虑迁移到Ember Data 1.0 beta。 Things have changed quite a lot. 事情已经发生了很大的变化。

In the latest version you can override the pathForType function in your Adapter . 在最新版本中,您可以在Adapter覆盖pathForType函数。

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

That TRANSITION document is very helpful for making the update. TRANSITION文档对进行更新非常有帮助。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM