2016-01-13 41 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