我有一个简单的用户模型,有两个字段:name和user_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'
});
}
});
}这段代码可以工作,只是我不能在我的承诺函数中调用this.store,因为this现在属于这个函数。
最好是创建一个操作,然后在我的else语句中调用该操作吗?但是,我如何从模型本身触发这个动作呢?
在这一点上,任何想法都是有帮助的。这感觉好像是我误解了安博的一些基本定律(再次)。
溶液
它丢失了一支箭..。这似乎是通过某种黑暗的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!
发布于 2018-02-22 03:28:27
我认为这个谜团更多的是一个JavaScript的谜团,而不是一个安伯尔的。
jsFiddle刚刚断了..。我也放弃了我的榜样但是..。我认为如果您只使用es2015箭头函数,它们就不会重新绑定'this‘
something
.then( (response)=> {
// ?
})
;或者,您可以在外部范围的某个位置执行2015年前风格的var context = this;,然后在内部作用域中使用它。试试看!)
https://stackoverflow.com/questions/48917795
复制相似问题