我有一个带有属性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"
}}在本例中,我了解到模型没有该属性,因此选择在控制器上创建一个名为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)。但是,我似乎无法在新记录中设置选定的组。任何帮助都将不胜感激!
发布于 2013-11-26 22:35:23
将属性的散列传递给createRecord只是创建记录并在该记录上调用setProperties的简写。那意味着通过
{selectedGroups: [...]}是相同的
user.set('selectedGroups', [...]}不幸的是,正如编写的那样,hasMany函数创建了一个不充当setter的计算属性。要明确的是:如果您在一个set属性上调用hasMany,它将不会产生任何影响。计算属性对传入的值绝对不起任何作用。在创建记录之后,您必须通过在pushObjects属性上调用selectedGroups来向用户添加记录。
https://stackoverflow.com/questions/20229270
复制相似问题