Ember.js:检查模型中是否已存在记录(错误 - 适配器的响应没有任何数据)

时间:2014-05-27 14:02:19

标签: ember.js ember-data

我想做的事情: 如果用户尝试注册已在模型中注册的用户名或电子邮件,则用户将收到错误。

当我尝试注册未注册的用户名(id)时,我收到此错误: 的 Error: Assertion Failed: You made a request for a user with id kevin, but the adapter's response did not have any data 我正在使用控制台和阅读文档进行调试,但我不确定为什么会出现此错误,请帮助我。

控制器 app/auth/register.js

中的

var AuthRegisterController = Ember.ObjectController.extend({
  name:     null,
  username: null,
  email:    null,
  password: null,
  error:    null,

  actions: {
    register: function(){
      this.set('error', null);
      var userInfo = this.getProperties('name', 'username', 'email', 'password');

      ...

      if(this.store.find('user', userInfo.username)){
        return this.set('error', 'The username is already registered.');
      }
      if(this.store.find('user', {email: userInfo.email})){
        return this.set('error', 'The email is already registered.');
      }

      ...

    }
  }

});

export default AuthRegisterController;

用户模型结构: app/models/user.js

var User = DS.Model.extend({
  name: DS.attr('string'),
  email: DS.attr('string'),
  password: DS.attr('string'),
  posts: DS.hasMany('post'),
});

User.reopenClass({
  FIXTURES: [{
    id: 'will',
    name: 'Will Smith',
    email: 'will@example.com',
    password: 'password'
  }]
});

export default User;

Ember documentation - Finding Records

1 个答案:

答案 0 :(得分:1)

find是一个异步方法,它将始终立即返回一个promise(也就是所有这些if语句都会执行)。使用Ember数据来查找记录是否存在是过度的,并且没有意义。当用户输入已经在系统中的用户名/电子邮件时,为其他用户返回用户信息是一个主要缺陷。这就是Ember Data用于记录管理,而不是这个记录存在。

所有这一切,只需在您的服务器上/available_user创建一个端点,允许您发布用户名/电子邮件,然后它会返回200,其结果包括{result:'ok'}或{{1}等等。

{result:'duplicate email'}