我有一个相当具体的问题,我希望你们其中一个真正聪明的人可能知道解决方案(或者甚至是现阶段的解决方法)
具体来说,我正在处理动作电缆,嵌套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
后代的所有观察者 - 而我需要它来只激发观察者改变的状态属性。
我已经尝试过很多东西,而且每个东西似乎都不起作用,或者仍然以一种解雇所有州观察者的方式继续更新状态。
我尝试了什么;
有人可以为我推荐一个策略或解决方案吗?我已经花了将近2天的时间解决这个问题。我甚至愿意在avl
/ tpms
/ dfm
之间将其拆分,只要在一个属性中这些部分的更改,它不会通知其他2个部分的属性。
由于