【问题标题】:Ember Data Relationships representations - create record not workingEmber 数据关系表示 - 创建记录不起作用
【发布时间】:2016-11-30 18:01:13
【问题描述】:

我有一个 User 和 Message 模型,如下所示:

//models/user.js

export default DS.Model.extend({
  name: DS.attr('string'),
});

//models/message.js

export default DS.Model.extend({
  body: DS.attr('string'),
  sender: DS.belongsTo('user', { inverse: null }),
  receiver: DS.belongsTo('user', { inverse: null }),
  user: DS.belongsTo('user')
});

消息/消息路由如下所示:

//messages/message/route.js

export default Ember.Route.extend({
model(params) {
  return Ember.RSVP.hash({
      messages: this.store.query('message', { filter: {user: params.user}   }),
      user: this.store.findRecord('user', params.user),
    });
  },

  setupController(controller, models) {
    controller.set('messages', models.messages);
    controller.set('user', models.user);
  }
});

在 router.js 我有

this.route('messages', function() {
  this.route('message', { path: ':user' });
});

所以基本上当您转到/messages/{user_id} 时,您可以查看当前用户与拥有{user_id} 的用户的所有消息。这是我在访问 messages/5 时从服务器得到的 JSON 响应

{
"messages": [
  {
    "id": 10,
    "sender": 1,
    "receiver": 5,
    "body": "Hello world!",
    "user": 5
  },
  {
    "id": 7,
    "sender": 1,
    "receiver": 5,
    "body": "Sorry, I don't get it!",
    "user": 5
  },
  {
    "id": 6,
    "sender": 5,
    "receiver": 1,
    "body": "Is it possible?",
    "user": 5
  }
]

}

现在,当尝试创建新消息时,没有发送者、接收者或用户 ID 可将创建的新记录与之关联,以便将它们发送到服务器。

这是我在有效载荷中的内容

{
  "body":"New message",
  "sender":null,
  "receiver":null,
  "user":null
}

很明显,我在人际关系上做错了什么,不知道如何处理这些问题。

//编辑

以下是我处理消息创建的方式:

actions: {
    sendMessage() {
        const flashMessages = Ember.get(this, 'flashMessages');
        this.store.createRecord('message', {
            body: this.get('message'),
            sender: this.get('currentUser.id'),
            user: this.get('user.id'),
        }).save().then(() => {
            flashMessages.success('Message sent!', {
                timeout: 2000,
                destroyOnClick: true
            });
        });
    },
}

【问题讨论】:

  • 如何创建新消息?你能发布代码吗?
  • 我刚刚编辑了 OP 以包含 sendMessage() 操作

标签: javascript ember.js ember-data


【解决方案1】:

在您的消息模型中,senderuserreceiver 都是关系,因此 ember-data 期待用户对象。您只是在 sendMessage 操作中为其提供 ID。

我相信有两种方法可以解决这个问题:

#1:使用 ID

#2:使用对象

#1 示例:

actions: {
    sendMessage() {
        const flashMessages = Ember.get(this, 'flashMessages');
        this.store.createRecord('message', {
            body: this.get('message'),
            senderId: this.get('currentUser.id'),
            userId: this.get('user.id'),
        }).save().then(() => {
            flashMessages.success('Message sent!', {
                timeout: 2000,
                destroyOnClick: true
            });
        });
    },
}

#2 示例:

actions: {
    sendMessage() {
        const flashMessages = Ember.get(this, 'flashMessages');
        this.store.createRecord('message', {
            body: this.get('message'),
            sender: this.get('currentUser'),
            user: this.get('user'),
        }).save().then(() => {
            flashMessages.success('Message sent!', {
                timeout: 2000,
                destroyOnClick: true
            });
        });
    },
}

其中一个或两个应该可以让您摆脱当前的困境。

【讨论】:

  • 感谢 Kori,使用示例 #2 做到了 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-20
  • 2014-01-22
  • 1970-01-01
  • 1970-01-01
  • 2018-09-29
  • 1970-01-01
  • 2018-07-22
相关资源
最近更新 更多