extjs模板循环的简单介绍
更新: 2022-11-14 23:11
本文目录一览:
- 如何销毁extjs窗体?
- extjs的card布局中使用XTemplate模板填充item的问题
- Extjs如何动态加载Extjs脚本
- extJS4.0 我在for循环里执行submit 为什么循环完了以后才会执行? 不能循环一次执行一次.
- extjs里的Ext.each可以中途退出吗?
- Extjs 2.0 如何动态的添加checkBox
如何销毁extjs窗体?
配置 closeAction: 'close'
属性。
API中这样讲:
- closeAction : String
当关闭按钮被点击时执行的操作。默认的操作是'close'
,这将把窗口从DOM中移除并摧毁它。另一个合法的选项是'hide'
,这将简单地隐藏窗口,通过设置它的 visibility 为 hidden,并且设置一个负数偏移量。通过 show 方法可以让窗口重新显示。 销毁流程如下:
- 触发
beforedestroy
这是一个可取消的事件,如果需要,可能通过提供事件代理来阻止组件被销毁。 - 调用
beforeDestroy
方法
又一个模板方法,在子类中可以重新实现和调用父类的方法。 - 移除事件监听者(代理)
如果组件已被呈现,则移除它底层的 HTML 元素的事件监听列表,然后将元素从 DOM 中移除。 onDestroy
被调用
这个还是一个模板方法,在子类可以重新实现。这里需要注意的是,容器类提供了一个默认的onDestroy
实现,它会循环销毁它的成员组件。- 组件实例从
ComponentMgr
中反注册
不可以再通过Ext.getCmp
获取到对象实例。 destroy
事件被触发
这只是一个简单的提醒,表示组件销毁成功。- 移除 Component 上的事件代理
组件可以独立于元素,自己拥有事件代理,如果存在则移除它们。
extjs的card布局中使用XTemplate模板填充item的问题
本质原因是 _pageFile
是在 render
事件触发后,才调用事件函数然后去获取这个参数,而这个参数最后的结果是数据的最后一个值,修改代码如下:
listeners: {
'render': function(panel) {
console.log(this);
this.tpl.overwrite(this.body, this.initialConfig.pageFile);
}
},
scope: this,
pageFile: _pageFile
完整示例:
var curIndex = 1;
var navHandler = function() {
if (curIndex == 2) {
curIndex = 0;
}
card.getLayout().setActiveItem(curIndex);
curIndex++;
};
var card = new Ext.Panel({
title: '向导的演示 Example Wizard',
layout: 'card',
activeItem: 0,
bodyStyle: 'padding:15px',
defaults: {
border: false
},
bbar: [
{
id: 'move-prev',
text: 'Back',
handler: navHandler.createDelegate(this, [-1]),
disabled: true
},
'-',
{
id: 'move-next',
text: '前进 Next',
handler: navHandler.createDelegate(this, [1])
}
],
items: []
});
var dataFile = [
{
pageFile: [
{
spec: 1,
pic: 11,
ranged: 111
}
]
},
{
pageFile: [
{
spec: 2,
pic: 22,
ranged: 222
}
]
}
];
var _pageFile;
for (var i = 0; i < dataFile.length; i++) {
_pageFile = dataFile[i];
card.add({
id: 'card-' + (i + 1),
tpl: new Ext.XTemplate(
'<table border="1">',
'<tr><td>规格</td><td>图片</td><td>对白</td></tr>',
'<tpl for="pageFile">',
'<tr><td>{spec}</td><td>{pic}-{ranged}</td><td>{dialogue}-{ranged}</td></tr>',
'</tpl>',
'</table>'
),
listeners: {
'render': function(panel) {
console.log(this);
this.tpl.overwrite(this.body, this.initialConfig.pageFile);
}
},
scope: this,
pageFile: _pageFile
});
}
card.render(document.body);
Extjs如何动态加载Extjs脚本
- 创建一个基本可用的 ExtJS 模板:
<!DOCTYPE html>
<html>
<head>
<title>ExtJS 动态加载示例</title>
<link rel="stylesheet" type="text/css" href="" />
<script type="text/javascript" src=""></script>
</head>
<body>
</body>
</html>
- 引用
ext-debug.js
,而不是ext-all-debug.js
。 - 配置
Ext.Loader
启用动态加载:
Ext.onReady(function() {
Ext.Loader.setConfig({
enabled: true,
disableCaching: false,
paths: {
Ext: '/ext-4/src'
}
});
});
extJS4.0 我在for循环里执行submit 为什么循环完了以后才会执行? 不能循环一次执行一次.
这样是不行的,submit 提交是需要时间的返回,for 循环不会等他的。不然如果提交的页面一直没返回结果,程序岂不是就卡住在这边了。
extjs里的Ext.each可以中途退出吗?
Ext.each(array, function(value) {
if (value == '2') {
return false;
}
}, this);
Ext.each
是遍历循环,你可以在方法中添加一个判断语句,当返回 false
的时候终止跳出遍历循环。
Extjs 2.0 如何动态的添加checkBox
两种办法:
- 从后台查出的权限,拼成字符串,用
request.setAttribute()
传递到前台,前台拿到后转成数组,循环数组创建checkbox
。 - 创建一个 checkbox 类,从后台查出的权限,每个权限 new 出一个 checkbox 类,得到一个 checkbox 的 list,将之转化为 JSON 串写到前台,前台接受并解析出一个数组,循环数组添加到表单中。 示例代码:
for (var i = 0; i < powers.length; i++) {
Ext.getCmp('form').add(powers[i]);
}
或者:
for (var i = 0; i < powers.length; i++) {
Ext.getCmp('form').add(new Ext.Checkbox({}));
}