2017-09-15 55 views
0

我正試圖訪問我的模型中特定字段的特定路線。無ID的路由頁面 - 如何使用其他字段?

例子: www.myPage.com/wedding/couple1 www.myPage.com/wedding/couple2

所有的例子,我在Ember的社區使用ID發現,但我想用另外一個(我將確保它是唯一的)。

我的路由配置:

Router.map(function() { 
    this.route('create-wedding'); 
    this.route('weddings'); 
    this.route('wedding', { path: 'wedding/:pageName' }); 
}); 

我的鏈接路徑:

{{#link-to 'wedding' wedding.pageName}}Access{{/link-to}} 

試圖讓記錄:

model(params) { 
    return this.store.query('wedding', { orderBy: 'pageName', equalTo: params.pageName }); 
} 

但是,如何得到的記錄了特定的參數「pageName」在我的路線模型?以及如何在用戶直接從URL訪問頁面時獲取相同的記錄?

在此先感謝

回答

0

如果非ID字段是真的,真的是唯一的(即強制在後端獨特性),您可以通過編寫自定義序列使用它作爲您的前端ID。

export default DS.JSONSerializer.extend({ 
    primaryKey: 'other_unique_key' 
}); 

如果您使用的是REST後端,只是換出DS.JSONSerializerDS.RESTSerializer在上面的代碼。

這將讓你緊跟Ember的備案處理約定的ID。您可以閱讀更多關於創作自定義序列化器here in the Guides的信息。

另一種方法是使用查詢參數。在這種情況下,您的網址看起來更像http://example.com/weddings?wedding=romeojuliet

瞭解有關查詢參數和訪問其值的更多信息here in the Guides

+0

我使用火力地堡作爲我的數據庫。我如何配置我的串行器與休息(如果我沒有錯,Firebase使用休息)。 –

+0

簡單,將上面的代碼更改爲RESTSerializer而不是JSONSerializer。並有通過https://emberjs.com/api/ember-data/2.14/classes/DS.RESTSerializer/properties/primaryKey?anchor=primaryKey – handlebears

+0

閱讀我所做的更改,我得到了錯誤:斷言失敗:normalizeResponse必須返回一個有效的JSON API文檔: \t *必須存在以下一個或多個鍵:「data」,「errors」,「meta」。 –

0

更多細節可以在這裏找到。 https://guides.emberjs.com/v2.15.0/models/finding-records/

對於此行的工作return this.store.query('wedding', { orderBy: 'pageName', equalTo: params.pageName });

你需要在你的API設置過濾器,將利用這些PARAMS。

還可以序列一個新的ID,或設置API消耗廢料,而不是ID。在這種情況下,你可以直接找到這樣的東西。 return this.get('store').findRecord('wedding', params.pageParam)

從技術上講,你應該在一個記錄的情況下使用queryRecord,而不是查詢。

而如果它是一個記錄,什麼是排序依據的目的是什麼?

And how do I get the same record when the user access the page directly from the URL?

因爲你在你的路由器有這個。this.route('wedding', { path: 'wedding/:pageName' });

您已經安裝直接在您的URL訪問它作爲域名/婚慶/網頁

相關問題