2014-11-04 134 views
1

我有以下设置:灰烬数据重写URL

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当我想从 http://localhost/ba/api/emails?tab=inbox改写为端点URL到 http://localhost/ba/api/emails/inbox。因此,我重写了find()-方法TabAdapter,但this.store.find('emails', {tab: "inbox"});运行时,它不会进入我的重写方法(并且我的测试警报不会被调用)。

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

+0

我是新来的灰烬,但有一个TabsController和Tab模型类呢? – GSP 2014-11-04 13:27:00

+0

是的,但它们目前是空的,如果未指定,Ember会自动为路线创建控制器。 App.TabController = Ember.Controller.extend({}); App.Tab = DS.Model.extend({}); – 2014-11-04 13:31:58

回答

2

你重写了错误的find方法。你的查询,而不是ID查找并应覆盖该方法

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

而且您使用的是TabAdapter这将是具体的不email(s)类型的tab类型的模型。你应该创建一个Email(s)Adapter。一般的约定是模型是单数btw。

参见:How do you create a custom adapter for ember.js?

+0

它仍然不会被调用?这真的很奇怪。 App.TabAdapter = DS.RESTAdapter.extend({ \t findQuery:功能(存储,类型,查询){ \t \t警报( “我不会被调用”); \t回this.ajax(this.buildURL( ,'GET',{data:query}); \t} }); – 2014-11-04 14:06:02

+0

已更新的答案... – Kingpin2k 2014-11-04 14:08:06

+0

Aaaah当然,谢谢!它非常有意义! – 2014-11-04 14:20:03