通过rowexpander插件展现一对多关联数据

先看效果

样品和审核记录是一对多的关系,通过XTemplate来展现数据。如果后台的数据是JSON格式的,这个事情就简单了,但是如果后台的数据是XML的,并且通过Model之间的hasmany关系来配置,就复杂一些了。

解决方案:

model.Sample.js

Ext.define("Soims.model.Sample", {
    extend: ‘Ext.data.Model‘,
    requires: [‘Soims.model.SampleAudit‘], // 引用文件
    fields: [
        { name: ‘id‘, mapping: ‘ID‘ },
        ‘index‘,
        { name: ‘sampleType‘, mapping: ‘SampleType‘ }
    ],
    // 注意下面的hasmany的配置,因为audit是关联查询出来的,所以reader放在这里比较好
    hasMany: { model: ‘Soims.model.SampleAudit‘, name: ‘SampleAudits‘, associationKey: ‘SampleAudits‘,
        reader: {
            type: ‘xml‘,
            record: ‘SampleAudit‘,
            root: ‘SampleAudits‘
        }
    }
});

model.SampleAudit.js

Ext.define("Soims.model.SampleAudit", {
    extend: ‘Ext.data.Model‘,
    fields: [
        { name: ‘id‘, type: ‘int‘, mapping: ‘ID‘ },
        { name: ‘auditType‘, mapping: ‘AuditType‘ },
        { name: ‘auditContent‘, mapping: ‘AuditContent‘ },
        { name: ‘contentType‘, mapping: ‘ContentType‘ },
        { name: ‘createTime‘, type: ‘date‘, mapping: ‘CreateTime‘ },
        { name: ‘auditerName‘, mapping: ‘AuditerName‘ }
    ],
    belongsTo: [{ // 配置多对一关联
        name: ‘Sample‘,
        model: ‘Soims.model.Sample‘
    }]
});

store.Sample.js

Ext.define("Soims.store.Sample", {
    extend: ‘Ext.data.Store‘,
    model: ‘Soims.model.Sample‘,
    autoLoad: false,
    groupField: ‘leg‘,
    proxy: {
        type: ‘ajax‘,
        url: ‘‘,
        reader: { // 注意
                type: ‘xml‘,
                root: ‘QueryResult‘,
                record: ‘Record‘,
                totalProperty: ‘Total‘,
                id: ‘ID‘
            }
    }
});

Grid中配置store.Sample.js的实例(略)

Grid中配置plugin,如下:

plugins: [{
        ptype: ‘associationrowexpander‘,
        rowBodyTpl: new Ext.XTemplate(
            ‘<tpl for=".">‘,
            ‘<p><b>样品类型:</b> {data.sampleType}</p>‘, // 注意
            ‘<div><b>审核记录</b></div>‘,
            ‘<tpl for="SampleAuditsStore.data.items">‘, // 注意
                ‘<tpl for=".">‘,
                    ‘{data.auditerName}&nbsp;&nbsp;{data.createTime:date("Y-m-d")}&nbsp;&nbsp;审核{data.auditContent} <br/>‘, // 注意
                ‘</tpl>‘,
            ‘</tpl>‘,
            ‘<input type="button" value="Show Price" onclick="showPanel()"/>‘,
            ‘</tpl>‘
        )
    }]

还需要对rowExpander的setCmp()方法做下修改:

getRowBodyContents: function(record) {
       return rowBodyTpl.applyTemplate(record); // 其实就是这里改变了
}

原本是把recrod.data做为数据源给XTemplate,但是对于hasmany是无法获取的。所以我们把record整个抛给了XTemplate,然后在实例化的时候,手动的搜索自己所需要的数据,主要是hansmany。

通过rowexpander插件展现一对多关联数据,布布扣,bubuko.com

时间: 2024-10-25 15:24:05

通过rowexpander插件展现一对多关联数据的相关文章

mybatis collection 一对多关联查询,单边分页的问题总结!

若想直接通过sql实现多级关联查询表结构得有2 个必不可少的字段:id ,parentId,levelId id:主键id, parentId:父id levelId:表示第几级(表本身关联查询的时候需要用到,不然会有重复数据) 利用mybatis collection 实现一对多关联查询 Dto:(一级) public class ProvinceInfoDTO implements Serializable { private String id; private String name;

Entity Framework Code First实体关联数据加载

小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 在项目过程中,两个实体数据之间在往往并非完全独立的,而是存在一定的关联关系,如一对一.一对多及多对多等关联.存在关联关系的实体,经常根据一个实体的实例来查询获取与之关联的另外实体的实例. Entity Framework常用处理数据关联加载的方

hihernate一对多关联映射

一对多关联映射利用了多对一关联映射原理 多对一关联映射:在多的一端加入一个外键指向一的一端,它维护的关系是多指向一 一对多关联映射:在多的一端加入一个外键指向一的一端,它维护的关系是一指向多 举个例子员工和老板.你说是老板记员工比较容易还是员工记老板比较容易呢?很明显记少的比较容易啊,能维护二者的关系也能减少工作量.hibernate当然也是这么做的. 也就是说一对多和多对一的映射策略是一样的,只是站的角度不同 在关系型数据库理论中,"多对一"关联同于"一对多"关联

【SSH系列】Hibernate映射 -- 一对多关联映射

    映射原理       一对多关联映射和多对一关联映射的映射原理是一样一样的,所以说嘛,知识都是相通的,一通百通,为什么说一对多关联映射和多对一关联映射是一样的呢?因为她们都是在多的一端加入一个外键,指向一的一段,关联关系都是在多的一端进行维护,只是我们在写映射的时候发生了变化.       一对多和多对一的映射原理是一样的,但是她们之间也存在着小小的区别,毕竟世界上没有两片完全相同的叶子,她们之间的区别就是维护的关系不同,我们先来看多对一,多端维护一端的关系,在加载多端的时候,可以将一端

一对多关联

1.什么是一对多关联 如果是2张表具有一对多的关系,希望在使用Hibernate操作"一"方数据时,可以自动关联操作”多“方数据,那么这种关联映射称之为一对多关联. 2.一对多关联的作用 可以通过”一“来操作”多“,包括 通过查询”一“,自动查询”多“ 通过新增/修改"一",自动新增/修改“多”. 通过删除“一”,自动删除“多”. 3.明确关系字段 以account与service为例 account与service具有一对多关系,其关系字段是service.acc

【SSH进阶之路】Hibernate映射——一对多关联映射(七)

上上篇博文[SSH进阶之路]Hibernate映射--一对一单向关联映射(五),我们介绍了一对一的单向关联映射,单向是指只能从人(Person)这端加载身份证端(IdCard),但是反过来,不能从身份证端加载人得信息. 上篇博文[SSH进阶之路]Hibernate映射--一对一双向关联映射(六),双向关联映射解决了单向关联映射只能从一端加载信息的缺陷,当然,双向关联映射并不影响存储,只影响加载.下面我们开始今天的内容: 一对多关联映射 映射原理 一对多关联映射和多对一关联映射的映射原理是一致的,

Contoso 大学 - 5 – 读取关联数据

原文地址:http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/reading-related-data-with-the-entity-framework-in-an-asp-net-mvc-application 全文目录:Contoso 大学 - 使用 EF Code First 创建 MVC 应用 在前面的课程中已经完成了 School 数据模型.在这次的课程中,将要读取和显示相关的数据,这里指的是 EF 通

014 一对多关联映射 单向(one-to-many)

在对象模型中,一对多的关联关系,使用集合来表示. 实例场景:班级对学生:Classes(班级)和Student(学生)之间是一对多的关系. 多对一.一对多的区别: 多对一关联映射:在多的一端加入一个外键指向一的一端,它维护的关系是多指向一的. 一对多关联映射:在多的一端加入一个外键指向一的一端,它维护的关系是一指向多的. 两者使用的策略是一样的,只是各自所站的角度不同. Classes实体类: public class Classes { private int id; private Stri

ThinkPHP5——模型的一对多关联

关联定义 一对多关联的情况也比较常见,使用hasMany方法定义,参数包括: hasMany('关联模型名','外键名','主键名',['模型别名定义']); 例如租客表和宿舍表,一个宿舍有多个租客,宿舍和租客一对多的关系,表结构如下: #宿舍 CREATE TABLE `apartment` ( `apar_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '编号', `apar_name` varchar(40) DEFAULT NULL COMMENT