2016-01-13 39 views
0

在應用程序中,我們允許用戶創建與現有記錄相關的新記錄。爲了實現這一目標,我們使用的行爲是這樣的:將未保存的記錄傳遞給Ember.js路由

createUser() { 
    var route = this; 

    var model = this.store.createRecord('user', { 
    client: route.modelFor('client'), 
    }); 

    route.transitionTo('user.update', model); 
}, 

user.update路線呈現一個user-form組件,使用在過渡傳遞模型。同樣的路線也被用來更新現有的用戶。

這種方法的問題如下;當刷新頁面時,由於路徑在查詢商店時無法找到相應記錄(此時URL爲/users/null/update),頁面錯誤。理想情況下,我會在URL中傳遞客戶端(或client.id)參數,以便:

  1. 頁面可以重新加載而不會出現問題。
  2. 與用戶關聯的客戶端設置正確。

我該如何在Ember.js中實現?我知道這可以很容易地使用嵌套路由(通過在客戶端路由中嵌套user.update路由)來完成,但這在視覺上沒有意義。

路由器的相關部分如下:

this.route('clients'); 
this.route('client', {path: 'clients/:id'}, function() { 
    this.route('users'); 
}); 

this.route('user', {path: 'users/:id'}, function() { 
    this.route('update'); 
}); 

所有我在用戶做/ update.hbs模板{{user-form user=model}}

+0

您可以發佈您的路由器,幷包含用戶表單組件的模板文件? –

回答

0

的問題是,您剛纔創建的模型沒有ID在這一點上,因爲它沒有被保存,所以如果可能的話,在你嘗試轉換到路由之前,如果不想保存模型,因爲用戶可以取消該動作檢查這個線程在哪裏有一個用戶有同樣的問題(如果我正確理解你的問題),我提供了一個解決這個問題的方法在I'm用我自己的項目

https://stackoverflow.com/a/33107273/2214998

+0

這解決了重新加載頁面的問題,但沒有設置客戶端,對吧? – joelcox