Ember - 如果模型为空则创建默认记录

Ember - create default record if model is empty

我有一个简单的用户模型,有两个字段:nameuser_id

应用程序启动时,我想检查我的用户模型是否包含至少一条记录 - 如果没有,我想自动创建一个默认 "admin" 用户。

我的 application 路线中有以下代码:

model() {

let user = this.store.findAll('user'); // find all users

let record = user.then(function(result) { 
    let first = result.get('firstObject'); // check if we at least one user
    if (first) { // if true, then we have at least one user
      let user_id = first.get('user_id'); // get the first user's id
      // do some more stuff here
    }
    else {
      console.log("no record found"); // no user found, let's create our default user
      let user = this.store.createRecord("user", { // <-- THIS DOESNT WORK - where can I create my record?
        user_id: 1,
        name: 'admin'
      });
    }
});

}

此代码有效,除了我无法在我的 promise 函数中调用 this.store,因为 this 现在属于该函数。

创建一个动作,然后在我的 else 语句中调用该动作会更好吗?但是,我如何从模型本身触发该操作?

此时任何想法都会有所帮助。感觉好像我误解了Ember(再次)的一些基本定律。

解决方案:

Annnnd 它缺少一个箭头.. 这似乎通过一些黑暗的 ECMAscript 魔法

保留了 this 上下文
let uniqueid = records.then(function(result) { // this returns an error (TypeError: this is undefined)
      let uniqueid = this.store.createRecord("uniqueid", {
        user_id: 1,
        name: 'admin'
      });
}
let uniqueid = records.then((result) => { // this works!
      let uniqueid = this.store.createRecord("uniqueid", {
        user_id: 1,
        name: 'admin'
      });
}

谢谢@sheriffderek!

我认为这个谜团 JavaScript 比 Ember 更神秘。

jsFiddle 刚刚坏了...我放弃了我的例子但是...我认为如果你只使用 es2015 箭头函数,它们不会重新绑定 'this'

something
  .then( (response)=> {
    // ?
  })
;

或者您可以在外部范围的某个地方做 2015 年前的样式 var context = this;,然后在内部范围中使用它。试试看! :)