我有一个属性为selectedGroups: hasMany('group')
的'用户'模型。当我编辑现有用户时,我可以在模板中使用Ember.Select
,如下所示:
{{view Ember.Select
multiple="true"
class="form-control"
selectionBinding="selectedGroups"
contentBinding="controllers.groups.allGroups"
optionLabelPath="content.name"
optionValuePath="content.id"}}
我的save
操作如下所示:
Usermanagement.UserEditController = Ember.ObjectController.extend({
needs: ['groups'],
actions: {
save: function() {
var user = this.get('model');
user.save();
this.transitionToRoute('user', user);
},
等。这很有效。但是,在创建新用户时,此技术不起作用。我有users/new
路线,如下所示:
Usermanagement.UsersNewRoute = Ember.Route.extend({
model: function() {
return {};
}
});
在我的模板中,我正在使用Ember.Select视图,如下所示:
{{view Ember.Select
prompt="Please select group(s)"
multiple="true"
class="form-control"
selectionBinding="newUsersGroups"
contentBinding="controllers.groups.allGroups"
optionLabelPath="content.name"
optionValuePath="content.id"
}}
在这种情况下,我了解到该模型没有该属性,因此Select会在控制器上使用该名称newUsersGroups
创建一个属性。我的控制器:
Usermanagement.UsersNewController = Ember.ObjectController.extend({
needs: ['groups'],
newUsersGroups: [],
actions: {
addNewUser: function() {
var that = this;
var newuser = this.get('model');
var grps= this.get('newUsersGroups');
newuser.selectedGroups= grps;
var user = this.store.createRecord('user', newuser);
// user.set('selectedGroups', grps);
user.save().then(function() {
that.transitionToRoute('users');
});
}
}
});
如果我检查调试器中的'grps'变量,我得到:
Ember.inspect(grps)
"[<Usermanagement.Group:ember558:1>]"
这对应于我选择的组的正确ID(1)。但是,我似乎无法在新记录中设置所选组。任何帮助将不胜感激!
答案 0 :(得分:1)
将属性哈希传递给createRecord
只是创建记录然后在该记录上调用setProperties
的简写。这意味着传递
{selectedGroups: [...]}
与
相同user.set('selectedGroups', [...]}
不幸的是,正如所写,hasMany
函数创建了一个不作为setter的计算属性。需要说明的是:如果您在set
媒体资源上致电hasMany
,则无效。计算属性与传入的值完全没有关系。您必须在创建后通过调用pushObjects
属性上的selectedGroups
将记录添加到用户。