【问题标题】:Ember hasMany Relationship not persistingEmber hasMany 关系不持久
【发布时间】:2015-10-20 07:01:36
【问题描述】:

我最近进入了 ember.js 开发,但遇到了一个问题。 我有两个模型 user.js 和 userpermissions.js

// user
export default DS.Model.extend({
   userName:DS.attr('string'),
   lastName:DS.attr('string'),
   permissionList:DS.hasMany('userpermission',{async:true}),
}); 

// userpermissions
export default DS.Model.extend({
  user:DS.belongsTo('user'),
  permissionName:DS.attr('string'),
  permissionId:DS.attr('string'),  
});

我正在尝试为用户记录设置权限。

export default Ember.Controller.extend({

     selectedPermission: {},
     newUser: {},
     init: function() {
        this.newUser = this.store.createRecord('user');
     },

     addPermission: function() {
        var permission = this.store.createRecord('userpermission');
        permission.set('permissionId', this.get('selectedPermission.id'));
        this.get('newUser').get('permissionList').pushObject(permission);
     }
});

最后为新用户调用保存。

this.get('newuser').save();

将数据持久化到我的 nodejs 后端。所有用户权限都记录为空。 我试图寻找解决方案,但找不到。 谁能指出我做错了什么,或者解决方案是什么 谢谢!

【问题讨论】:

    标签: node.js ember.js ember-data ember-cli


    【解决方案1】:

    您似乎没有保存权限记录...

    您无需担心表格,但您需要保存两个模型。在通过 API 保存两条记录时,Ember 无法假定知道所需的操作顺序,因此您必须以正确的顺序显式保存每条记录。

    所以尝试修改你的控制器:

    export default Ember.Controller.extend({
    
         selectedPermission: {},
         newUser: {},
         init: function() {
            this.newUser = this.store.createRecord('user');
         },
    
         addPermission: function() {
            var permission = this.store.createRecord('userpermission');
            permission.set('permissionId', this.get('selectedPermission.id'));
            this.get('newUser').get('permissionList').pushObject(permission);
    
            permission.save();
         }
    });
    

    【讨论】:

      【解决方案2】:

      我通过添加用户 Serializer 和 EmbeddedRecordsMixin 解决了这个问题

      import DS from 'ember-data';
      
      export default DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {
      attrs: {
      permissionList: { embedded: 'always' },
      
      }
      });
      

      【讨论】:

        【解决方案3】:

        我们建立的方式有很多联系。

            // user
            export default DS.Model.extend({
               userName:DS.attr('string'),
               lastName:DS.attr('string'),
            }); 
        
            // permissions
            export default DS.Model.extend({
              permissionName: DS.attr('string)
            });
        
            // userpermissions
            export default DS.Model.extend({
              user:DS.belongsTo('user'),
              permission:DS.belongs('permission')
            });
        

        通过第三张桌子。

        关于保存:Set multiple data with Ember and make it persist on Firebase

        user.save().then(function(user) {
          permission.save().then(function(permission) {
              userpermission.save().then(function() {
                    // Connection done
              });
          });
        }, failure);
        

        【讨论】:

          猜你喜欢
          • 2015-11-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-07-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多