灰烬 - 如果模型为空,则创建默认记录

时间:2018-02-22 00:34:18

标签: ember.js

我有一个简单的用户模型,有两个字段: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它错过了一个箭头..这似乎保留了this背景,通过一些黑暗的ECMAscript魔法

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!

1 个答案:

答案 0 :(得分:1)

我认为这个谜是一个JavaScript之谜,而不是一个Ember谜。

jsFiddle刚刚破产......而我放弃了我的榜样但我认为如果你只使用es2015箭头功能,他们就不会重新打造这个&#39;这个&#39 ;

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

或者您可以在外部范围内的某处执行2015之前的样式var context = this;,然后在内部范围中使用它。试试看! :)