反序列化模型之前的页面加载

时间:2018-08-07 16:08:24

标签: ember.js ember-data ember-cli

用例:

我正在尝试呈现一个页面,该页面比较两次性能基准测试的输出。

问题:

在页面呈现时,仅部分数据被反序列化。多次刷新后,所有数据都将呈现。

“网络”标签似乎表明后端已正确发送了输出。

执行:

1)使用api / reports /:reportId呈现数据。

此api被调用两次,使用2个reportIds进行比较,然后将差异显示在UI上。

/ reports /:reportId api返回如下输出:

 {
  "data": {
    "id": 87,
    "type": "reports",
    "attributes": {
      "status": "STARTED",
      "startdatetime": 1532511531000,
      "enddatetime": 1533485380052,
      "queries": [
       {
        "startdatetime": 1532511531000,
        "enddatetime": 1533485380056,
        "reportId": 87,
        "id": "Q1"
      }
    ]
   }
  }
}

输出会间歇性地渲染除“查询”数组以外的所有内容,同时在某些运行中会完美地反序列化数组。

2)为了解析查询数组,我使用了一个自定义数组转换,例如:

import DS from 'ember-data';

export default DS.Transform.extend({
   deserialize: function(serialized) {
      return (Ember.typeOf(serialized) == "array")
        ? serialized
        : [];
   },
   serialize: function(deserialized) {
      var type = Ember.typeOf(deserialized);
      if (type == 'array') {
        return deserialized
      } else if (type == 'string') {
        return deserialized.split(',').map(function(item) {return jQuery.trim(item);});
      } else {
        return [];
      }
  }
});

3)报告模型如下:

status: DS.attr('string'),
startdatetime: DS.attr('number'),
enddatetime: DS.attr('number'),
queries: DS.attr('array')

4)我的比较路线如下:

import Route from '@ember/routing/route';
import { hash } from 'rsvp';
import { inject as service } from '@ember/service';

export default Route.extend({
model(params) {
   return hash({
     leftrun: this.store.findRecord('report', params.id1),
     rightrun: this.store.findRecord('report', params.id2)
   })
 }
});

当查询数组未反序列化时,在调试模式下运行页面时,

1)我可以看到“状态”和其他属性是可访问的。

2)网络选项卡显示report /:runId的输出为“待处理”(设置为“状态”则没有意义。)页面完全加载后,网络选项卡显示webapp接收到包括查询数组在内的全部数据。

引起问题的流程或转换是否存在问题?

0 个答案:

没有答案