首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >成员-如果模型为空,则创建默认记录

成员-如果模型为空,则创建默认记录
EN

Stack Overflow用户
提问于 2018-02-22 00:34:18
回答 1查看 328关注 0票数 1

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

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

在我的application路由中有以下代码:

代码语言:javascript
复制
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'
      });
    }
});

}

这段代码可以工作,只是我不能在我的承诺函数中调用this.store,因为this现在属于这个函数。

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

在这一点上,任何想法都是有帮助的。这感觉好像是我误解了安博的一些基本定律(再次)。

溶液

它丢失了一支箭..。这似乎是通过某种黑暗的this魔法来保持ECMAscript上下文的。

代码语言:javascript
复制
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!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-22 03:28:27

我认为这个谜团更多的是一个JavaScript的谜团,而不是一个安伯尔的。

jsFiddle刚刚断了..。我也放弃了我的榜样但是..。我认为如果您只使用es2015箭头函数,它们就不会重新绑定'this‘

代码语言:javascript
复制
something
  .then( (response)=> {
    // ?
  })
;

或者,您可以在外部范围的某个位置执行2015年前风格的var context = this;,然后在内部作用域中使用它。试试看!)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48917795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档