【发布时间】:2014-07-10 18:48:56
【问题描述】:
我有以下路由器:
router.js:
var Router = Ember.Router.extend({
location: AppENV.locationType
});
Router.map(function() {
this.resource('groups', { path: '/groups' }, function() {
this.resource('members', { path: ':group'});
});
});
export default Router;
这会在路由 /groups 和路由 /groups/<groupId> 处呈现侧边栏,它会显示带有组的侧边栏以及所选组中的成员。应用程序的主视图包含有关所选组的信息。
到目前为止一切正常。但是我的想法是,在创建新组时,我想使用路由 /groups/new 显示未保存的组,并在应用程序的主视图中显示有关该特定未保存组的详细信息。
所以,我为会员准备了这条路线:
/routes/members.js:
export default Ember.Route.extend({
model: function (params) {
return Ember.RSVP.hash({
members: this.store.find('member', {group: params.group}),
group: this.store.find('group', params.group)
});
},
setupController: function(controller, model){
this._super(controller,model);
this.controllerFor('group').set("group", model.group);
},
renderTemplate: function(controller, model) {
this.render('members',{
outlet:'sidebar-members'
});
this.render('group', {controller: 'group'});
}
});
这会加载当前选定组的成员和选定组本身并呈现两个模板:成员侧边栏列表和包含组模板的主视图。同样,这适用于已经存在的条目。
现在我发现这个 stackoverflow [1] 描述了我应该能够在路由 /groups/new 下使一个新创建的组可用。所以,我在上面显示的成员路由中添加了一个序列化函数:
serialize: function(model, params) {
if (model && model.get('isNew')) {
// corresponds to path '/groups/:group'
return { group: 'new'}
}
return this._super(model, params);
},
我现在可以使用组控制器创建一个新组并转换到该路由:
控制器/groups.js:
export default Ember.ArrayController.extend({
actions: {
create: function() {
var group = this.store.createRecord('group', {
name: 'test'
});
this.transitionToRoute('members', group);
},
}
});
这适用于侧边栏:添加了一个新组。路线/groups/new 显示在浏览器中。但是,该新组不会传递到呈现组模板的主视图。组变量似乎在模板和组控制器中未定义。我尝试了两种方法都没有在模型上设置 id 并将 id 设置为“新”。似乎没有任何改变。
有没有更好的方法来做到这一点,或者我尝试做事的方式是否存在特定错误?
【问题讨论】:
标签: ember.js