成功后更新 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 调用中的 successerror 属性 - 它 returns 一个可以链接的承诺 .then 上。您仍然需要绑定 this、使用闭包或使用箭头函数,但是转向使用 promises 而不是回调是有好处的。

使用承诺

$.ajax({...}).then(
  successFunction,
  errorFunction
);