ExtJs根据数据源Json数据来动态创建store与columnModel

extjs动态生成model、store、panel extjs动态生成model、store、panel;sql拼接等多种技术难点 立即下载

需求:需要根据数据动态显示Gridpanel的列。

思路:将json数据取出,然后遍历json首行的列。已拼接字符串的形式来生成columnModel和store的fields字段值。

代码如下:

json数据(createcol.json):

{
                'coders': [
        { 'pro':'ADM','id': '1',  'name': 'McLaughlin', 'descn': 'brett@newInstance.com','test':'test' },
        { 'pro':'RMS','id': '2', 'name': 'Hunter', 'descn': 'jason@servlets.com' },
        { 'pro':'fdks','id': '3',  'name': 'Harold', 'descn': 'elharo@macfaq.com' },
        { 'pro':'fkas','id': '4',  'name': 'Harolds', 'descn': 'elhaross@macfaq.com' },
        { 'pro':'qfks','id': '5',  'name': 'Karolds', 'descn': 'lhaross@macfaq.com' },
        { 'pro':'wfks','id': '6',  'name': 'Yarolds', 'descn': 'elaross@macfaq.com' },
        { 'pro':'efks','id': '7',  'name': 'Jarolds', 'descn': 'elharss@macfaq.com' },
        { 'pro':'rfks','id': '8',  'name': 'Larolds', 'descn': 'elhass@macfaq.com' },
        { 'pro':'tfks','id': '9',  'name': 'Haroldws', 'descn': 'elhaross@macfaq.com' },
        { 'pro':'yfks','id': '10',  'name': 'WHarolds', 'descn': 'elhaross@macfaq.com' }
    ]   
 }

js代码:

Ext.onReady(function() {
        /**  
        * 同步ajax调用 返回json Object  
        *   
        * @param {}  
        *            urlStr  
        * @param {}  
        *            paramsStr 为字符串键值对形式"key=value&key2=value2"  
        * @return {} 返回json Object  
        */
        function ajaxSyncCall(urlStr) {

            var obj;
            var result;
            //For IE
            if (window.ActiveXObject) {
                obj = new ActiveXObject('Microsoft.XMLHTTP');
            }
            //For Not IE
            else if (window.XMLHttpRequest) {
                obj = new XMLHttpRequest();
            }
            obj.onreadystatechange = function() {

                if (obj.readyState == 4 && obj.status == 200) {
                    result = obj.responseText;

                }
            }
            //param:Type:'get/post';URL;sync(是否异步传输)
            obj.open('GET', urlStr, false);
            //obj.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');   
            obj.send(null);

            return result;
        }
        var sm = new Ext.grid.CheckboxSelectionModel();
        var rn = new Ext.grid.RowNumberer()
        var proj = {
            header: "pro",
            //renderTo:"hello",
            dataIndex: "pro",
            editor: { xtype: 'textfield',
                allowBlank: false
            }
        };
        //返回model和store的fields字段值
        function getFields() {
            var col = "[rn,sm,";
            var stor_str = "[";
            var result = "";
            var json = Ext.util.JSON.decode(ajaxSyncCall("creatcol.json?id=" + Math.random()));
            //遍历外层对象
            for (data in json) {
                //第二层循环,遍历数组
                for (dt1 in json[data]) {
                    //第三层循环,遍历hash数据
                    for (dt2 in json[data][dt1]) {
                        //将header和dataIndex的值一hash格式传到数组中,在声明columnModel时用
                        //var temp = {};
                        col += "{header:" + "'" + dt2 + "',";
                        col += "dataIndex:" + "'" + dt2 + "',";
                        //col += sm+"'"+dt2+"',";
                        //col +=new Ext.grid.RowNumberer()+"'"+dt2+"',";
                        col += "editor:{ xtype:'textfield',allowBlank: false}},";
                        stor_str += "{name:" + "'" + dt2 + "'},";
                    }
                    col = col.substring(0, col.lastIndexOf(","));
                    stor_str = stor_str.substring(0, stor_str.lastIndexOf(","));
                    col += "]";
                    stor_str += "]";
                    result = col + "$" + stor_str;
                    return result;
                }






            }
        }

        var result = getFields(); alert(result);
        var index = result.indexOf("$");
        var columnModel = result.substring(0, index);
        var storeStr = result.substring(index + 1);
        // var sm = new Ext.grid.CheckboxSelectionModel();
        var cm = new Ext.grid.ColumnModel(
        //new Ext.grid.RowNumberer(),
        //sm,
     eval(columnModel)

    );
        cm.defaultSortable = true;
        // ArrayReader
        var store = new Ext.data.Store({
            root: 'coders',
            //remoteSort: true,
            proxy: new Ext.data.HttpProxy({
                url: 'creatcol.json?id=' + Math.random(),
                method: 'GET'
            }),
            reader: new Ext.data.JsonReader({
                idProperty: 'threadid',
                root: 'coders'
            }, eval(storeStr))
        });
        store.load({ params: { start: 0, limit: 5} });

        var tbar = [
                    new Ext.Toolbar.TextItem('Tools bar:'),
                { xtype: "tbfill" }, {
                    pressed: true,
                    text: "Refresh",
                    handler: function() {
                        Ext.Msg.alert("Refresh", "Refresh!")
                    }
                }, {
                    xtype: "tbfill"
                }, {
                    pressed: true,
                    text: "Selection"
                }, {
                    xtype: "tbseparator"
                }, {

                    pressed: true,
                    text: "Add",
                    handler: function() { Ext.Msg.alert("Add", "add infro!") }
                }, {
                    xtype: "tbseparator"
                }, {
                    pressed: true,
                    text: "save",
                    handler: function() {
                        Ext.Msg.alert("Save", "save infro successed!!!")
                    }
                }, {
                    xtype: "tbseparator"
                }
                 ];
        var grid = new Ext.grid.EditorGridPanel({
            draggable: true,
            store: store,
            cm: cm,
            el: grid,
            renderTo: 'w',
            width: 630,
            height: 320,
            loadMask: true,
            //tbar:tbar,
            tools: [{ id: "save" }, {
                id: "help",
                handler: function() { Ext.Msg.alert("Help", "Need help!") }
            }, {
                id: "close",
                handler: function() { grid.hide(); }
}],
                bbar: [
                    new Ext.PagingToolbar({
                        store: store,
                        pageSize: 5,
                        displayInfo: true,
                        displayMsg: "Displaying {0} - {1} of {2}",
                        emptyMsg: "No data to display",
                        items: ['-', {
                            pressed: true,
                            enableToggle: true,
                            text: 'show preview',
                            cls: 'x-btn-text-icon details',
                            toggleHandler: function(btn, pressed) {
                                var view = grid.getView();
                                view.showPreview = pressed;
                                view.refresh();
                            }
}]
                        })
             ],
                collapsible: true,
                multiSelect: true,
                title: 'Edit Plants',
                frame: true,
                clicksToEdit: 2,
                trackMouseOver: true,
                // viewConfig: {
                stripeRows: true,
                enableTextSelection: true
                //}

            });
            grid.render();


        }); 


深空探测处理软件USGS-ISIS的下载安装 深空探测处理软件USGS-ISIS下载安装教程 阅读详情

相关推荐

基于STM32的多模态智能风扇控制系统设计与实现

本文详细介绍了基于STM32单片机的多模态智能风扇控制系统的设计与实现。系统集成了红外遥控、蓝牙手机控制及人体感应等多模态交互方式,通过PWM技术实现无级调速,并设计了安全优先的控制逻辑。文章从硬件选型、核心原理、软件编程到系统调试,提供了完整的实战指南,适合嵌入式开发爱好者学习与实践。

weixin_28285943的博客 238

extjs前台请求json数据,并解析

jsonStore的请求数据中包含root的json格式。 var defineIdStore = new Ext.data.JsonStore({     url : this.rootPathS       + "/busi/templateCfg_getDefineNameData.do", //请求连接     root : 'root',//json的头//json字符串的根值

liuyangan2008的专栏 871

STM32G0——USB虚拟串口

STM32G0用cubeMX配置实现USB虚拟串口

阿昌 2321

ExtJS中的Store操作(如何引用已生成的JSON数据)

前言,常规的ExtJS的Store,在new一个Store控件的时候,加上proxy属性,指向URL,在URL里返回特定格式的JSON数据即可。 即: [code="java"] var store = new Ext.data.Store({ // 获取数据的方式 proxy : new Ext.data.HttpProxy({ url : 'car...

angelbill3的专栏 1109

Android Camera性能优化概述

做camera性能优化方面的工作有几年了,想写一篇文章简单介绍一下其中涉及到的具体技术,这篇文章会大概介绍一下涉及到的技术。

weixin_42136255的博客 4025

088、多摄像头跨镜目标追踪 ID 频繁切换?ReID 特征 + 轨迹关联 + 时间约束方案

文章摘要:本文针对多摄像头跨镜目标追踪中ID频繁切换的问题,提出了一种结合ReID特征、轨迹关联和时间约束的综合解决方案。作者分析了ID切换的三个主要原因:ReID特征不稳定、轨迹关联依赖最近邻匹配以及忽略时间约束。通过改进ReID特征提取(多层特征融合)、引入轨迹预测(卡尔曼滤波)和添加时间窗口约束,成功将ID切换率从35%降至3%以下。文章详细分享了实现细节和踩坑经验,为跨摄像头目标追踪提供了实用优化思路。

ai技术增长的博客 169

动态改变Ext store的参数

var itemsPerPage = 20 ; var store =new Ext.data.Store({             pageSize: itemsPerPage,             fields : [              'yourfield1',              'yourfield2',             ],

莫理琴的专栏 5676

DFT笔记 DC/AC mode与Func

DFT scan可以分为DC和AC两种,区别如下图。

m0_61544122的博客 5730

extjs4 store动态列

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34205826的博客 234

还在用 RaiDrive/Rclone 挂载网盘?教您使用Windows 原生 WebDAV 丝滑直连 AList/Openlist,让你的网盘秒变本地硬盘!

网盘文件分散管理?😩 别再依赖第三方工具了!本文教你如何在 Windows 下,利用原生 WebDAV 功能,将 Openlist 网盘直接映射为本地硬盘!💻 操作简单,告别繁琐,让你的云端文件像本地文件一样丝滑!🚀 轻松实现高效管理,快来体验吧!

XiaoqiangClub的博客 2977

【深度学习】什么是自回归模型?

自回归模型是一种重要的时间序列模型,通过利用过去的值来预测当前或未来的值。它在统计学、经济学、自然语言处理等领域有广泛的应用。自回归模型的简单性和可解释性使其成为许多应用的首选,但在更复杂的情况下,可能需要结合其他模型如移动平均模型(MA模型)或混合模型(如ARIMA)来更好地捕捉时间序列中的模式。扩散模型(Diffusion Model)和自回归模型(Autoregressive Model)是两种不同的生成模型,各自有独特的特点和应用场景。

q742971636的博客 1673

Extjs中grid 的ColumnModel 属性配置

一, 用数组的方式配置ColumnModel var colModel = new Ext.grid.ColumnModel([ { header:'编号', dataIndex:'id',width:200}, { header:'名称', dataIndex:'name',width:300} ]}; 注意:上述写法ColumnModel的构造参数必须是一个数组,哪...

weixin_30391339的博客 197

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Extjs中创建Store数据源的方式

Store简要说明请查看:http://extjs.org.cn/node/564 一.本地数据源 1.数组格式的数据:data只能是数组!——不能用JsonStore,否则报错! 01 var arrStore = new Ext.data.SimpleStore({ 02     data:[

csnewdn的专栏 4413

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

EXTJs 实现表格数据显示-----JSON

首先创建三个文件:grid04.html、grid04.js、grid04.jsongrid04.html内容如下: grid04.html  grid04.js的文件如下:Ext.onReady(function(){

sz_bdqn的专栏 7230

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

[转] EXTJS学习笔记:grid之gridview

extjs中的grid的挺功能强大,以下是我自己做项目时用到的显示访客信息的一个grid,我将通过这个来分析grid的用法以及与SQL2000等数据库的连接过来。 我们就从最简单的grid开始,一步步来看看extjs给我们提供的grid究竟给我们提供了哪些功能。     在EXTJS中,一个grid包括行、列以及其他辅助信息,在extjs里边,列由Ext.grid.ColumnModel来管理,

我为编程狂,我为外语狂 3507

Extjs GridPanel使用攻略简单教程

<!-- Title:GridPanel 使用方案简单教程 Author:Lovingshu(Mr Samael) Date:2012/07/27 Remark:Use simple way to work with EXTJS --> Extjs中功能强大的组件太多了~GridPanel就是其中一个,写一个简单的教程实现GridPanel数据的加载... CODES: /

lovingshu's Forever 2049

ExtJs的Grid组件配合struts2返回json数据

使用extjs的grid组件,简单做了一个分页条。主要目地是把数据库中的数据呈现到前端的grid中。

haidian_fengyu的专栏 639

ExtJS4组件_Grid配置-属性-方法详解-案例

1、Ext.grid.GridPanel 主要配置项: store:表格的数据集 columns:表格列模式的配置数组,可自动创建ColumnModel列模式 autoExpandColumn:自动充满表格未用空间的列,参数为列id,该id不能为0 stripeRows:表格是否隔行换色,默认为false cm、colModel:表格的列模式,渲染表格时必须设置该配置项 sm、sel

heitdf 5904

ExtJS框架学习(一)

最近因为工作的原因,接触到ExtJS框架(2.0版本),惊为天人.只是使用起来比较复杂,我就把我学习过程中遇到的问题和解决问题的办法晒出来,以便后来人参考,指正和研究. 因为涉及到数据格式的转换问题,我在这里用的是Newtonsoft.JSON把业务对象转换成字符串.它是个开源的工具,可在网上搜索下载并合法的使用. 我想程序员最常做的一...

172

extjs中的mapping 和 dataIndex

在extjs的项目开发中,有时候中弄不清record中的 mapping和columnModel中的dataIndex的区别,在这里做下备注 数据集  data: var MyRecord = Ext.data.Record.create([              {name: 'title'},              {name: 'username', mapping: '...

风中浮柳的专栏 1666

EXTJS分别用数组和JSON对象数组填充表格数据

1,首先说一下用数组填充ExtJS表吧,这个在网上随处找得到 下面的代码是我写的弹出窗口的一个JS函数: function trialTotal(){       var tablecol = new Ext.grid.ColumnModel([                                           {header:"",dataIndex:"rowname"

3月3的风筝 8659

Ext中的store.load

     对于Ext中的store,我的最常用方法是用store,CloumnModel,gridPanel结合起来 一起使用,把数据库的数据展示在gridPanel中,这就必须调用store.load了;问题也随之而来了,如果是后台属于正常调用,而且有数据的时候就很好做了,但是如果是出现了异常,或者没有数据,那就必须向前台写会相应的信息,在前台中显示;为了这个问题搞了很久,终于解决;解决的方法就...

qinjingkai的专栏 306
上一篇: update时连接表
下一篇: sql 分布式查询
mx5721
博客等级 码龄17年 24粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值