Обновление хранилища данных ember после успешного ajax POST - PullRequest
0 голосов
/ 24 мая 2018

Я пытаюсь получить доступ к хранилищу данных ember после успешного запроса ajax.Вот что я пытаюсь:

$.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 голосов
/ 24 мая 2018

Вы можете либо связать это с вашей функцией (мой предпочтительный способ обработки подобных ситуаций), либо использовать замыкание, чтобы разделить 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, либо использовать замыкание, либо использовать функцию стрелки, но есть преимущества при переходе к использованию обещаний, а не обратных вызовов.

Использование обещания

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