Ember。选择不在新记录上工作

时间:2013-11-26 22:24:52

标签: ember.js ember-data

我有一个属性为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)。但是,我似乎无法在新记录中设置所选组。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

将属性哈希传递给createRecord只是创建记录然后在该记录上调用setProperties的简写。这意味着传递

{selectedGroups: [...]}

相同
user.set('selectedGroups', [...]}

不幸的是,正如所写,hasMany函数创建了一个不作为setter的计算属性。需要说明的是:如果您在set媒体资源上致电hasMany,则无效。计算属性与传入的值完全没有关系。您必须在创建后通过调用pushObjects属性上的selectedGroups将记录添加到用户。