extjs的html绑定变量,ExtJs动态添加组件

1.ExtJs通过json获取其他方式获取到多条数据,然而这个时候多条数据是不固定的,我们需要动态的添加组件来显示这些数据(这些数据不是使用grid的方式进行展示)大致需要展示的效果见下图:

mmi2aa.png

操作方法是这样如下:

1.给需要动态展示数据的组件加上id,方便获取需要展示容器的内容,代码如下:

Ext.define('*.*.*', {

extend: 'Ext.view.panel',

alias: '*.*',

requires: ['*','*'],

title: "XXXX",

width: '100%',

layout: 'vbox',

id:'id1',

items: []

});

可以看到给组件加了个id为id1的组件

2.在contrller里边定义其中一个展示组件的变量:

var treePanel = {

layout: 'vbox',

width: '100%',

items: [{

xtype: 'container',

layout: 'hbox',

flex: 7,

border: true,

defaults: {

labelWidth: 120,

labelAlign: 'right',

xtype: 'displayfield',

width: '100%',

minWidth: 130,

maxWidth: 220,

margin: '10 0 10 0',

},

items: [{

fieldLabel: '参数位置',

name: 'position'

}, {

fieldLabel: '参数编码',

name: 'argumentName'

}, {

fieldLabel: '数据类型',

name: 'dataType'

}, {

fieldLabel: '最大长度',

name: 'dataLength'

}, {

fieldLabel: '输入/输出',

name: 'inOut'

}]

}, {

xtype: 'container',

layout: 'hbox',

flex: 2,

defaults: {

labelAlign: 'right',

margin: '10 0 10 0',

minWidth: 250,

maxWidth: 400,

},

items: [{

name: 'argumentType',

fieldLabel: '参数类型',

xtype: 'extendcombo',

editable: false,

store: '***',

displayField: 'name',

valueField: 'id',

allowBlank: false,

hasDefaultValue: false,

showRedStar: false,

isHasNoLimit: false,

queryMode: 'local',

emptyText: '请进行选择'

}, {

name: 'argnameZh',

fieldLabel: '参数名称',

xtype: 'textfield',

width: 500

}]

}, {

xtype: 'container',

layout: 'hbox',

flex: 6,

defaults: {

labelWidth: 120,

labelAlign: 'right',

xtype: "textfield",

height: 30,

minWidth: 800,

maxWidth: '100%',

margin: '10 0 10 0',

},

items: [{

fieldLabel: '参数描述',

name: 'argumentDesc'

}]

}]

};

3.在获取json数据读取的地方,进行处理动态数据

var panel = Ext.getCmp("id1");

panel.removeAll();

var dataLen = result.data.length;//result 为获取到的json数据 次数为模拟的

if (dataLen > 0) {

for (var i = 0; i < dataLen; i++) {

panel.add(treePanel);

}

panel.doLayout();

var position = Ext.ComponentQuery.query('displayfield[name=position]', panel);

var argumentName = Ext.ComponentQuery.query('displayfield[name=argumentName]', panel);

var dataType = Ext.ComponentQuery.query('displayfield[name=dataType]', panel);

var dataLength = Ext.ComponentQuery.query('displayfield[name=dataLength]', panel);

var inOut = Ext.ComponentQuery.query('displayfield[name=inOut]', panel);

for (var i = 0; i < dataLen; i++) {

var config = result.data[i];

position[i].setValue(config.position);

argumentName[i].setValue(config.argumentName);

dataType[i].setValue(config.dataType);

dataLength[i].setValue(config.dataLength);

inOut[i].setValue(config.inOut);

}

}

Ext.getCmp获取指定id或者name的容器

panel.add 方法是相指定的容器的items下添加item,需要调用doLayout是添加后的item展示到页面中

Ext.ComponentQuery.query这个方法可以获取到某一个组件下的同一个name的子组件,根据页面name出现的顺序获取,获取到的是一个数组。

再添加item子项之前,需要将指定的熔旗下的item进行清空(removeAll)处理,防止页面重现打开(未进行强制刷新)时item重复添加。

2.获取同样name的value方法

使用1中的 Ext.getCmp获取指定id或者name的容器

Ext.ComponentQuery.query这个方法可以获取到某一个组件下的同一个name的子组件,根据页面name出现的顺序获取,获取到的是一个数组。

然后循环遍历数组使用getValue的方法,获取每一个name的value。

作者:o黑色乌鸦o

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值