Ember - 如果模型为空则创建默认记录
Ember - create default record if model is empty
我有一个简单的用户模型,有两个字段: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 它缺少一个箭头.. 这似乎通过一些黑暗的 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;
,然后在内部范围中使用它。试试看! :)
我有一个简单的用户模型,有两个字段: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 它缺少一个箭头.. 这似乎通过一些黑暗的 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;
,然后在内部范围中使用它。试试看! :)