2014-11-04 132 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