用例:
我正在尝试呈现一个页面,该页面比较两次性能基准测试的输出。
问题:
在页面呈现时,仅部分数据被反序列化。多次刷新后,所有数据都将呈现。
“网络”标签似乎表明后端已正确发送了输出。
执行:
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接收到包括查询数组在内的全部数据。
引起问题的流程或转换是否存在问题?