在IE

时间:2017-02-14 09:45:12

标签: javascript angularjs datatable render rerender

我的应用程序中有一个驾驶舱,有不同的D3图表和Angular中的数据表,分布在三个标签上。 所有数据都来自API,并与Datapromises一起使用。 客户希望能够过滤数据,例如使用特定的projectNr。过滤也是通过API完成的,因此应用程序将使用正确的参数再次发送请求。

这一切在Chrome 56.0,Firefox 51.0.1和Safari 10.0.2中运行良好

问题出现在Internet Explorer 11(可能还有其他IE版本)

我会告诉您工作流程如何在Chrome中运行。

Console Logs

蓝色日志只是JavaScript console.time()。 对于每个触发的API请求,HTTP.GETGOT日志来自我们的ApiService。 所以现在你看到第一次访问驾驶舱我们得到了请求allManagerData。此请求获取我们填写驾驶舱图表和表格所需的所有数据。 然后我们有一些自动完成输入,这些输入与API有关。此API调用recordsearch获取自动完成输入的选项选项。 当从自动完成输入中选择一个对象时,过滤逻辑开始。它实际上是相同的,就像初始加载一样,只是API请求获得了具有正确过滤器值的其他参数。在第二个allManagerData请求返回后,将重新呈现所有数据表和图表。

这很好,但不是在IE中! 当IE11完全相同的输入时,这是控制台。

enter image description here

你看到rerender-函数被初始请求正确调用,但是第二个请求它会在第一次重新渲染时崩溃。不关心哪一个是第一个,它是第一个DataTable.rerender()在两种情况下(初始和过滤后)将使用$cockpit.rerenderDataTables();

调用重新渲染

$cockpit.rerenderDataTables = function () {
  if ($cockpit.dtStars.DataTable) {
    console.log('rerenderTable 1');
    $cockpit.dtStars.rerender();
  }
  if ($cockpit.dtNote10.DataTable) {
    console.log('rerenderTable 2');
    $cockpit.dtNote10.rerender();
  }
  if ($cockpit.dtYesNo.DataTable) {
    console.log('rerenderTable 3');
    $cockpit.dtYesNo.rerender();
  }
  if ($cockpit.dtProjects.DataTable) {
    console.log('rerenderTable 4');
    $cockpit.dtProjects.rerender();
  }
};

前端的数据表如下:

<table datatable="ng" dt-options="$cockpit.dtConfig.dtOptions" class="row-border stripe hover" dt-instance="$cockpit.dtStars">

我真的不知道IE11中的.rerender()函数有什么问题。

任何人都使用Angular1 Datatables并且在IE上重新渲染时遇到问题? 还是其他任何想法?

谢谢!

0 个答案:

没有答案