操作电缆,嵌套的JSON属性和JSONAPI

时间:2017-06-23 05:04:35

标签: ember.js ember-data json-api

我有一个相当具体的问题,我希望你们其中一个真正聪明的人可能知道解决方案(或者甚至是现阶段的解决方法)

具体来说,我正在处理动作电缆,嵌套JSON和JSONAPI

我有一个asset模型,它有一些属性,如namedesc等,但它也有一个名为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后代的所有观察者 - 而我需要它来只激发观察者改变的状态属性

我已经尝试过很多东西,而且每个东西似乎都不起作用,或者仍然以一种解雇所有州观察者的方式继续更新状态。

我尝试了什么;

  1. ember-model-data-fragments(虽然它应该工作,我认为动作电缆推送数据的方式必须颠覆这个?)
  2. 嵌入式记录(需要状态ID,目前不兼容JSONAPI)
  3. 原始json变换(将json变成ember对象,似乎没有帮助)
  4. 有人可以为我推荐一个策略或解决方案吗?我已经花了将近2天的时间解决这个问题。我甚至愿意在avl / tpms / dfm之间将其拆分,只要在一个属性中这些部分的更改,它不会通知其他2个部分的属性。

    由于

0 个答案:

没有答案