首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ember.Select不处理新记录

Ember.Select不处理新记录
EN

Stack Overflow用户
提问于 2013-11-26 22:24:52
回答 1查看 95关注 0票数 0

我有一个带有属性selectedGroups: hasMany('group')的“用户”模型。在编辑现有用户时,可以在模板中使用Ember.Select,如下所示:

代码语言:javascript
复制
{{view Ember.Select
  multiple="true"
  class="form-control"
  selectionBinding="selectedGroups"
  contentBinding="controllers.groups.allGroups"
  optionLabelPath="content.name"
  optionValuePath="content.id"}}

我的save动作是这样的:

代码语言:javascript
复制
Usermanagement.UserEditController = Ember.ObjectController.extend({
    needs: ['groups'],
    actions: {
        save: function() {
            var user = this.get('model');
            user.save();
            this.transitionToRoute('user', user);
        },

等等。这工作得很好。但是,在创建新用户时,此技术不起作用。我有一条users/new路线,就像这样:

代码语言:javascript
复制
Usermanagement.UsersNewRoute = Ember.Route.extend({
  model: function() {
    return {};
  }
});

在我的模板中,我使用了一个Ember.Select视图,如下所示:

代码语言:javascript
复制
        {{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的属性。我的控制器:

代码语言:javascript
复制
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”变量,就会得到:

代码语言:javascript
复制
Ember.inspect(grps)
"[<Usermanagement.Group:ember558:1>]"

这对应于我选择的组的正确ID (1)。但是,我似乎无法在新记录中设置选定的组。任何帮助都将不胜感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-26 22:35:23

将属性的散列传递给createRecord只是创建记录并在该记录上调用setProperties的简写。那意味着通过

代码语言:javascript
复制
{selectedGroups: [...]}

是相同的

代码语言:javascript
复制
user.set('selectedGroups', [...]}

不幸的是,正如编写的那样,hasMany函数创建了一个不充当setter的计算属性。要明确的是:如果您在一个set属性上调用hasMany,它将不会产生任何影响。计算属性对传入的值绝对不起任何作用。在创建记录之后,您必须通过在pushObjects属性上调用selectedGroups来向用户添加记录。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20229270

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档