extjs提供了很多官方组件,例如grid,table,tab,却找不到普通的list组件,可以通过继承Ext.view.View来实现
一个的列表定义
Ext.define('waterApp.view.business.device.DeviceOtherSpecList', {
extend: 'Ext.view.View',
xtype: 'other-spec-list',
padding: '0 8',
tpl: new Ext.XTemplate(
'<div class="other-spec-wrap">',
'<div class="other-spec-title"><span style="vertical-align: middle;">设备其他参数规格</span> <img style="vertical-align: middle; cursor: pointer;" id="otherSpecAddBtn" src="/resources/images/business/add-btn.png" alt=""></div>',
'<div class="other-spec-list">',
'<tpl for=".">',
'<div class="other-spec-item">',
'<img class="other-spec-del" src="/resources/images/business/del-btn.png" alt="">',
'<div class="other-spec-txt">',
'<div class="other-spec-label">{attr}</div>',
'<div>{val} <span class="other-spec-unit">{unit}</span></div>',
'</div>',
'</div>',
'</tpl>',
'</div>',
'</div>'
),
store: {
data: [
{
attr: '核定功率',
val: '1000',
unit: 'kw'
}
]
},
itemSelector: 'div.other-spec-item',
listeners: {
boxready (ins, opts) {
ins.getActionEl().down('#otherSpecAddBtn').on({
click () {
Ext.getCmp('deviceOtherSpecModalWin').show();
}
});
},
itemclick (view, record, item, index, e, eOpts) {
if (e.target.className === 'other-spec-del') {
this.getStore().remove(record);
};
}
},
});
其中要注意的配置有itemSelector
,用来实现点击列表项的事件处理
itemSelector必须是循环的列表项的选择器,例如上面的列表项对应的class是other-spec-item,所以配置为div.other-spec-item
,否则会报错extjs Cannot read property 'internalId' of undefined
获取渲染的列表容器元素
通过getActionEl()
获取列表容器元素后可以绑定一些列表外的元素,例如表头等等的事件处理
boxready (ins, opts) {
ins.getActionEl().down('#otherSpecAddBtn').on({
click () {
Ext.getCmp('deviceOtherSpecModalWin').show();
}
});
}
尾部位置添加新元素
Ext.getCmp('otherSpecList').getStore().add(formData);
指定位置添加新元素
Ext.getCmp('otherSpecList').getStore().insert(0, formData);
移除指定元素
获取指定的record,然后移除
Ext.getCmp('otherSpecList').getStore().remove(record);