成功执行ajax POST后更新ember数据存储

时间:2018-05-24 20:28:07

标签: javascript ember.js ember-data

我尝试在成功的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')是否有人知道如何实现这一点或知道我做错了什么?

1 个答案:

答案 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
);