extjs模板循环的简单介绍

发布时间:2023-12-08

extjs模板循环的简单介绍

更新: 2022-11-14 23:11

本文目录一览:

  1. 如何销毁extjs窗体?
  2. extjs的card布局中使用XTemplate模板填充item的问题
  3. Extjs如何动态加载Extjs脚本
  4. extJS4.0 我在for循环里执行submit 为什么循环完了以后才会执行? 不能循环一次执行一次.
  5. extjs里的Ext.each可以中途退出吗?
  6. Extjs 2.0 如何动态的添加checkBox

如何销毁extjs窗体?

配置 closeAction: 'close' 属性。 API中这样讲:

  • closeAction : String
    当关闭按钮被点击时执行的操作。默认的操作是 'close',这将把窗口从DOM中移除并摧毁它。另一个合法的选项是 'hide',这将简单地隐藏窗口,通过设置它的 visibility 为 hidden,并且设置一个负数偏移量。通过 show 方法可以让窗口重新显示。 销毁流程如下:
  1. 触发 beforedestroy
    这是一个可取消的事件,如果需要,可能通过提供事件代理来阻止组件被销毁。
  2. 调用 beforeDestroy 方法
    又一个模板方法,在子类中可以重新实现和调用父类的方法。
  3. 移除事件监听者(代理)
    如果组件已被呈现,则移除它底层的 HTML 元素的事件监听列表,然后将元素从 DOM 中移除。
  4. onDestroy 被调用
    这个还是一个模板方法,在子类可以重新实现。这里需要注意的是,容器类提供了一个默认的 onDestroy 实现,它会循环销毁它的成员组件。
  5. 组件实例从 ComponentMgr 中反注册
    不可以再通过 Ext.getCmp 获取到对象实例。
  6. destroy 事件被触发
    这只是一个简单的提醒,表示组件销毁成功。
  7. 移除 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脚本

  1. 创建一个基本可用的 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>
  1. 引用 ext-debug.js,而不是 ext-all-debug.js
  2. 配置 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

两种办法:

  1. 从后台查出的权限,拼成字符串,用 request.setAttribute() 传递到前台,前台拿到后转成数组,循环数组创建 checkbox
  2. 创建一个 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({}));
}