我有一个相当具体的问题,我希望你们中的一个真正聪明的人可能知道解决方案(甚至是现阶段的解决方法)
具体来说,我正在处理操作电缆、嵌套 JSON 和 JSONAPI.
我有一个asset
模型,它具有一些属性,例如name
, desc
等等,但它还有一个属性称为state
这是一个复杂的嵌套 JSON 对象。
// app/models/asset.js
export default DS.Model.extend({
// Attributes
name: DS.attr('string'),
desc: DS.attr('string'),
state: DS.attr(),
lastSeen: DS.attr('date'),
});
当资产上的任何内容在后端发生变化时,它会被通过电缆推送到 Ember,在那里它会执行pushPayload(data)
,有效负载如下所示;
{
"data": {
"id": "5",
"type": "assets",
"attributes": {
"asset_id": "962ABC",
"name": "962 ABC",
"desc": "Test Vehicle",
"activation_status": "active",
"state": {
"avl": {
"longitude": 152.9475426,
"reported_at": "2017-06-22T21:59:52Z"
},
"dfm": {
"in_alarm": false,
"reported_at": "2017-06-21T05:46:57Z",
"sensitivity": "normal",
"voice_prompt": false,
"driver_detected": true,
},
"tpms": {
"system_desc": "123ABC",
"system_type": "123_abc"
}
},
"last_seen": "2017-06-22T21:59:54.000Z"
},
"relationships": {
"company": {
"data": {
"id": "1",
"type": "companies"
}
},
"events": {
"links": {
"related": "/events/?asset_id=5"
}
},
"messages": {
"links": {
"related": "/messages/?asset_id=5"
}
}
}
}
}
这一切都工作得很好,而且由于电缆的原因,资产和状态的更新会在发生时显示,并且state
是只读的,所以我不必担心保存任何东西。但是,我注意到,当任何单个属性state
后端发生变化,整个资产从后端下推(这应该没问题),然后这会触发观察者state
以及所有观察员state
后代 - 虽然我需要它只针对发生变化的状态属性触发观察者.
我尝试了很多事情,但每一种似乎要么根本不起作用,要么仍然以一种解雇所有状态观察员的方式继续更新状态。
我尝试过什么;
- ember-model-data-fragments (虽然它应该可以工作,但我认为操作电缆推送数据的方式必须颠覆这个?)
- 嵌入记录(需要状态 ID,目前与 JSONAPI 不兼容)
- 原始 json 转换(将 json 转换为 ember 对象,似乎没有帮助)
有人可以建议我尝试的策略或解决方案吗?我在这个问题上花了近两天的时间..我什至愿意将其分开avl
/tpms
/dfm
,只要其中一个部分中的属性发生更改,它就不会通知其他 2 个部分中的属性。
Thanks