成功后更新 ember 数据存储 ajax POST
Update ember data store after successful ajax POST
我正在尝试在 ajax 请求成功后访问 ember 数据存储。这是我正在尝试的:
$.ajax({
contentType: "application/json",
method: "POST",
data: JSON.stringify(data),
processData: false,
url: url,
success: this.actions.update,
beforeSend: function() {
},
error: function() {
}
});
update(data) {
this.get('store').pushPayload({
item: {
id: data.item.id,
title: data.item.title,
images: data.images
}
});
},
这里的问题是 this
不是 ember 组件,而是 ajax 对象。我需要能够访问 ember 才能更新商店。所以,这需要工作 this.get('store')
有人知道如何实现这个或知道我做错了什么吗?
您可以将它绑定到您的函数(我处理此类情况的首选方式)或使用闭包在两个地方共享 this.get('store')
。
绑定
...
success: this.actions.update.bind(this)
....
关闭
const store = this.get('store');
$.ajax({
...
success: update
});
// Note this isn't an action anymore, but a declared function
function update() {
...
}
您还可以使用 ES6 箭头函数,它维护 this
的上下文
$.ajax({
...
success: data => {
}
...
});
顺便说一句,我会认真考虑放弃 $.ajax
调用中的 success
和 error
属性 - 它 returns 一个可以链接的承诺 .then
上。您仍然需要绑定 this
、使用闭包或使用箭头函数,但是转向使用 promises 而不是回调是有好处的。
使用承诺
$.ajax({...}).then(
successFunction,
errorFunction
);
我正在尝试在 ajax 请求成功后访问 ember 数据存储。这是我正在尝试的:
$.ajax({
contentType: "application/json",
method: "POST",
data: JSON.stringify(data),
processData: false,
url: url,
success: this.actions.update,
beforeSend: function() {
},
error: function() {
}
});
update(data) {
this.get('store').pushPayload({
item: {
id: data.item.id,
title: data.item.title,
images: data.images
}
});
},
这里的问题是 this
不是 ember 组件,而是 ajax 对象。我需要能够访问 ember 才能更新商店。所以,这需要工作 this.get('store')
有人知道如何实现这个或知道我做错了什么吗?
您可以将它绑定到您的函数(我处理此类情况的首选方式)或使用闭包在两个地方共享 this.get('store')
。
绑定
...
success: this.actions.update.bind(this)
....
关闭
const store = this.get('store');
$.ajax({
...
success: update
});
// Note this isn't an action anymore, but a declared function
function update() {
...
}
您还可以使用 ES6 箭头函数,它维护 this
的上下文$.ajax({
...
success: data => {
}
...
});
顺便说一句,我会认真考虑放弃 $.ajax
调用中的 success
和 error
属性 - 它 returns 一个可以链接的承诺 .then
上。您仍然需要绑定 this
、使用闭包或使用箭头函数,但是转向使用 promises 而不是回调是有好处的。
使用承诺
$.ajax({...}).then(
successFunction,
errorFunction
);