我想让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控制台
如果有人能够发现为什么这种方法不起作用那就太好了。
-----更新-----
如果我将此商店定义添加到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之间进行连接。
有趣!