我尝试在成功的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')
是否有人知道如何实现这一点或知道我做错了什么?
答案 0 :(得分:4)
您可以将此绑定到您的函数(我处理这些情况的首选方式)或使用闭包在两个地方共享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箭头功能来维护此
的上下文$.ajax({
...
success: data => {
}
...
});
顺便说一句,我会认真考虑放弃success
调用中的error
和$.ajax
属性 - 它会返回一个可以链接.then
的承诺。你仍然需要绑定this
,使用闭包或使用箭头函数,但是使用promises而不是回调会有好处。
使用承诺
$.ajax({...}).then(
successFunction,
errorFunction
);