我有一个简单的用户模型,有两个字段: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'
});
}
});
}
此代码有效,但我无法在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!
答案 0 :(得分:1)
我认为这个谜是一个JavaScript之谜,而不是一个Ember谜。
jsFiddle刚刚破产......而我放弃了我的榜样但我认为如果你只使用es2015箭头功能,他们就不会重新打造这个&#39;这个&#39 ;
something
.then( (response)=> {
// ?
})
;
或者您可以在外部范围内的某处执行2015之前的样式var context = this;
,然后在内部范围中使用它。试试看! :)