KitchenSink

时间:2017-06-23 00:43:50

标签: json rest extjs associations

我想让Kitchen Sink binding-associations与之合作 通过API提供的几个测试表,不幸的是没有任何运气。我使用的是ExtJS 6.20。

我的模特是:

Ext.define('md_registry.model.Patient', {
    extend: 'Ext.data.Model',

    fields: [
        { name: 'id', type: 'string' },
        { name: 'mrn', type: 'string' },
        { name: 'birth_data', type: 'string' },
        { name: 'sex', type: 'string' },
        { name: 'first_name', type: 'string' },
        { name: 'last_name', type: 'string' }
    ],

    proxy: {
        type: 'rest',
        url: 'http://127.0.0.1:5000/patientview/api/read',
        reader: {
            type: 'json',
            rootProperty: 'result'
        }
    }

});

Ext.define('md_registry.model.Procedure', {
    extend: 'Ext.data.Model',

    fields: [
        { name: 'procedure_id', type: 'string' },
        { name: 'proc_code', type: 'string' },
        { name: 'proc_name', type: 'string' },
        {
            name: 'patientId',
            reference: {
                parent: 'md_registry.model.Patient',
                inverse: {
                    autoLoad: false
                }
            }
        }
    ],

    proxy: {
        type: 'rest',
        url: 'http://127.0.0.1:5000/procedureview/api/read',
        reader: {
            type: 'json',
            rootProperty: 'result'
        }
    }

});

虽然我的基于Kitchensink示例的关联网格面板是:

Ext.define('md_registry.view.main.ListAssociation', {
    extend: 'Ext.panel.Panel',
    alias: 'widget.binding-associations',
    width: 500,
    height: 300,
    referenceHolder: true,
    layout: {
        type: 'hbox',
        align: 'stretch'
    },

    viewModel: {
        stores: {
            patients: {
                model: 'md_registry.model.Patient',
                autoLoad: true
            }
        }
    },
    session: {},

    items: [{
        title: 'All Patients',
        xtype: 'grid',
        bind: '{patients}',
        reference: 'patientGrid',
        flex: 1,
        columns: [{
            text: 'First Name', dataIndex: 'first_name', flex: 1
        }, {
            text: 'MRN', dataIndex: 'mrn'
        }]
    }, {
        title: 'Procedures',
        xtype: 'grid',
        bind: '{patientGrid.selection.procedures}',
        flex: 1,
        margin: '0 0 0 10',
        columns: [{
            text: 'Proc Code', dataIndex: 'proc_code'
        }],
        viewConfig: {
            emptyText: 'No procedures',
            deferEmptyText: false
        }
    }]
});

患者商店装的很好,但没有加载程序商店。

请求中返回的患者商店的JSON如下所示:

[{
    "birth_date": "1962-07-30T00:00:00",
    "first_name": "Phil",
    "id": "8F6AC8467F3822492A1ADF5D90EB",
    "last_name": "Schaff",
    "mrn": "00605911",
    "sex": "M"
}, {
    "birth_date": "1903-05-07T00:00:00",
    "first_name": "Charles",
    "id": "55BE732E665B3DC40A9B38EC560A",
    "last_name": "Parker",
    "mrn": "00515954",
    "sex": "M"
}]

虽然从API返回的程序存储的数据如下所示:

[
  { 
    "patientId": "55BE732E665B3DC40A9B38EC560A", 
    "proc_code": "97162", 
    "proc_name": "Blood count; complete (CBC)", 
    "procedure_id": "09F9A8886A1BAD5A3B65CBF4F0C0"
  }, 
  { 
    "patientId": "8F6AC8467F3822492A1ADF5D90EB", 
    "proc_code": "93.54", 
    "proc_name": "Application of splint", 
    "procedure_id": "0D601F45F5ECAC3ED44EF7B3701F"
  }, 
  {
    "patient_id": "8F6AC8467F3822492A1ADF5D90EB", 
    "proc_code": "99206", 
    "proc_name": "Antibody screen, RBC, each serum technique", 
    "procedure_id": "11C34881646C0CB6FC7DEF2EF718"
  }, 
  {
    "patientId": "8F6AC8467F3822492A1ADF5D90EB", 
    "proc_code": "99206", 
    "proc_name": "Antibody screen, RBC, each serum technique", 
    "procedure_id": "20393DF4CDEA38F7E954760887A5"
  }, 
  { 
    "patientId": "55BE732E665B3DC40A9B38EC560A", 
    "proc_code": "99207", 
    "proc_name": "Aldolase", 
    "procedure_id": "74692AFBED2317E87746C199906A"
  }, 
  { 
    "patientId": "8F6AC8467F3822492A1ADF5D90EB", 
    "proc_code": "99207", 
    "proc_name": "Aldolase", 
    "procedure_id": "76DE627192C6ABA747697C84EBE6A458"
  }]

我觉得这与我的id是一个字符串而不是一个int有关。不幸的是,这些数据来自EHR,这是我需要处理的主要核心结构。

如果它不是id,那为什么这不起作用?如上所述,我从API获得的唯一响应是通过模型代理进行患者存储。当我查看JAvaScript控制台JavaScript network resources

时,关联的Procedures存储不存在

如果有人能够发现为什么这种方法不起作用那就太好了。

-----更新-----

如果我将此商店定义添加到ListAssociation视图,我现在可以从API中看到所请求的JSON:

procedures: {
                model: 'md_registry.model.Procedure',
                autoLoad: true
            }

但是,我仍然无法在“过程”网格中显示相关数据。

-----更新2 -----

我将过程模型中的patientId定义更改为:

{
    name: 'patientId',
    reference: {
        parent: 'md_registry.model.Patient',
        inverse: 'procedures'

    }
}

而且,现在当我点击一个病人时,它正在从API中获取程序,除了它是整个程序列表,而不是应该通过{{1}链接回特定患者的程序子集。但是,为了混淆问题,它 从过程存储中抓取右patientId.,并将其显示在过程网格中。它只是链接到所有程序。

我已经检查了从API传递的数据,这是正确的。看起来ExtJS没有正确地在Patient和Procedure之间进行连接。

有趣!

0 个答案:

没有答案