2013-10-23 39 views
0

我拼命地試圖讓Ember 1.x中的slugs工作。在Ember.js 1.x路由中使用slu 012

我的序列化方法似乎很好地工作。使用鏈接助手或transitionToRoute方法,我可以毫無問題地導航到我的路線。 但是,當我重新加載我的頁面時,我得到了一堆錯誤,因爲我的承諾解決了模型數組而不是單個模型。

如何findQuery的結果減少到一個模型?

,我發現了一箇舊版本Ember.js這裏有幫助的答案: Using a slug in an emberjs route 不幸的是,解決方案不工作了。 「one」沒有定義,所以我嘗試將我的代碼調整到當前版本。根據promise文檔,promise對象的then方法中的返回值應該傳遞給下一個處理程序。但是,我仍然得到一個數組和我的錯誤之後。

我的路線實現:

App.ManageRoute = Ember.Route.extend 
    model: (params) -> 
    promise = @get('store').findQuery('company', {slug: params.company_id}) 
    promise.then (models) -> 
     return models.get("firstObject") 
    return promise; 

    serialize: (model, params) -> 
    return {company_id: model.get('slug')} 

[更新]

的解決方案是創建並返回一個新的承諾對象爲單一的模式。

See marvilein's answer

+0

你可以顯示你的路由器映射PLZ嗎? – mavilein

回答

2

有一兩件事你可以做的是創造出準確對應於一個對象,而不是整個數組的新承諾:

App.ManageRoute = Ember.Route.extend 
    model: (params) -> 
    promise = @get('store').findQuery('company', {slug: params.company_id}) 
    newPromise = Ember.Deferred.create() 
    promise.then (models) -> 
     newPromise.resolve(models.get("firstObject")) 
    return newPromise; 

PS:我不知道的CoffeeScript所以有可能小的語法錯誤。而且我不知道Ember Data是否提供了更方便的方法來實現這種行爲:-)

+0

承諾管理的很好的例子,你在響應'newPromise.resolve(model.get( 「firstObject」))一個錯字'應該是'newPromise.resolve(models.get( 「firstObject」))' – Edu

+0

工程就像一個魅力:) – skython

+0

Thx的錯字提示。我糾正了它。 – mavilein