1

我有“myview”扩展面板并使用 tpl 之类的

extend: 'Ext.Panel',
tpl: '<b>ab </b>{some}'

我不想使用 myview.update({some: "..."}); 当我单击一个按钮时,我想用新的 tpl 更改 tpl。我用

myview.tpl = "change" // not working

我该怎么做谢谢

4

1 回答 1

3

您可以使用更新模板obj.tpl = new XTemplate("my name is {y}");

这有效:

Ext.define('My.Example', {
    extend: 'Ext.Panel',
    tpl: 'hello {x}'
});

var panel = new Ext.create('My.Example', {
    data: {
        x: 'World'
    },
    renderTo: Ext.getBody()
});

var button = new Ext.create('Ext.button.Button', {
    text: "click me",
    listeners: {
        click: function () {
            panel.tpl = new Ext.XTemplate('my name is {y}');
            panel.update({
                y: 'monkey magic'
            });
        }
    },
    renderTo: Ext.getBody()
});
<link href="https://cdnjs.cloudflare.com/ajax/libs/extjs/4.2.1/resources/css/ext-all-neptune.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/extjs/4.2.1/ext-all-debug.js"></script>

对我来说,它们是两个不同的对象,因为您拥有完全不同的模板。您可以销毁一个并在其位置渲染另一个:

Ext.define('My.Example', {
    extend: 'Ext.Panel',
    tpl: 'hello {x}'
});

Ext.define('My.Example2', {
    extend: 'Ext.Panel',
    tpl: "My name is {y}"
});

var panel = new Ext.create('My.Example', {
    data: {
        x: 'World'
    },
    renderTo: Ext.getBody()
});

var button = new Ext.create('Ext.button.Button', {
    text: "click me",
    listeners: {
        click: function () {
            panel.destroy();
            panel = Ext.create('My.Example2', {
                data: {
                    y: 'monkey magic'
                },
                renderTo: Ext.getBody()
            });
        }
    },
    renderTo: Ext.getBody()
});
<link href="https://cdnjs.cloudflare.com/ajax/libs/extjs/4.2.1/resources/css/ext-all-neptune.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/extjs/4.2.1/ext-all-debug.js"></script>

于 2013-07-01T09:44:22.597 回答