在Ember中,AJAX回调应该包含在Ember运行循环中吗?

时间:2017-06-23 11:52:22

标签: javascript jquery ajax ember.js callback

以下声明为from ember guides

  

使用run循环的最常见情况是与a集成   非Ember API,包括某种异步回调。对于   例如:

     

DOM更新和事件回调
  setTimeout和setInterval回调
  postMessage和messageChannel事件处理程序
   AJAX回调
  Websocket回调

我通常会为AJAX请求做,

Ember.$.ajax(
{
 type: "POST",
 url:"someurl",
 contentType: "application/json",
 success: function(data) {
 //Should I wrap this success callback code in Run loop. or is it safe to leave
 //Here I will set properties to display, I might call sendAction/send to communicate with parent.
 }
})

我没有遇到任何问题,但有时渲染在回调中更改数据后花费了太多时间?有没有人面对这个问题?

我应该使用ember-ajax addon在Ember运行循环中包装成功回调吗?

PS:下面是from ember guides, 你应该在Ember.run中包装任何非Ember异步回调。如果不这样做,Ember将尝试为您预测开始和结束。依靠自动运行不是一种严格或有效的方式来使用运行循环。

1 个答案:

答案 0 :(得分:1)

这对我有用。基本上,您只需要将操作/回调包装在run.bind循环中即可。 https://github.com/ember-cli/eslint-plugin-ember/blob/master/docs/rules/jquery-ember-run.md

import $ from 'jquery';
import { bind } from '@ember/runloop';

$.ajax({
  type: "POST",
  url:"someurl",
  contentType: "application/json",
}).then(bind(this, (data) => {
  // Handle success here
});