Ember数据重写URL

时间:2014-11-04 13:25:12

标签: ember.js ember-data

我有以下设置:

App.Router.map(function() {
    this.route('tab', { 'path' : 'tab/:which' });
});

App.ApplicationStore = DS.Store.extend({});
App.ApplicationAdapter = DS.RESTAdapter.extend({
    host: '../api'
});

App.TabAdapter = DS.RESTAdapter.extend({
  find: function(store, type, id) {

    alert("I doesn't get invoked");

    return this._super(store, type, id);
  }
});

App.TabRoute = Ember.Route.extend({
  model: function(params) {
    return this.store.find('emails', {tab: "inbox"});
  }
});

当访问路线#/tab/inbox时,我想重写端点的URL http://localhost/ba/api/emails?tab=inboxhttp://localhost/ba/api/emails/inbox。因此,我在TabAdapter上覆盖find() - 方法,但是当this.store.find('emails', {tab: "inbox"});运行时,它不会输入我的重写方法(并且我的测试警报不会得到调用)。

为什么我的被覆盖的find() - 方法没有被调用?

1 个答案:

答案 0 :(得分:2)

你覆盖了错误的find方法。你是通过查询找到的,而不是id,应该覆盖那个方法

 findQuery: function(store, type, query) {
    // Do your thing here
    return this.ajax(this.buildURL(type.typeKey), 'GET', { data: query });
 }

您正在使用TabAdapter,该tab特定于类型为email(s)的{​​{1}}类型的模型。您应该创建一个Email(s)Adapter。一般惯例是模型是单数的。

另请参阅:How do you create a custom adapter for ember.js?