我有一个这样的标签面板:
var tab1 = {
id: 'section1',
title: 'First Section',
padding: 10,
html: '(this content will be replaced with an ajax load)'
}
var tab2 = {
id: 'section2',
title: 'Second Section',
padding: 10,
html: '(this content will be replaced with an ajax load)'
}
var tab3 = {
id: 'section3',
title: 'Third Section',
padding: 10,
html: '(this content will be replaced with an ajax load)'
}
var modules_info_panel = new Ext.TabPanel({
region: 'center',
activeTab: 0,
border: false,
defaults:{autoScroll:true},
items:[tab1, tab2, tab3]
});
然后在创建此tabpanel之后,我想动态更改选项卡的内容,但这些都不起作用:
tab1.html = 'new html'; // no effect
tab1.title = 'new title'; // no effect
tab1.update('new text'); // error: tab1.update is not a function
viewport.doLayout(); // no effect
由于我想通过 AJAX 加载每个标签的内容,我不想动态添加标签as suggested in this question但是想要标签单击时可以从第一次加载中看到,并且每个标签的内容都会动态更改。
如何在创建标签后更改标签的内容?
更新
感谢@Chau抓住我的疏忽:当我使用Ext.Panel
而不是简单的javascript对象文字创建标签时,它可以工作:
var tab1 = new Ext.Panel ({
id: 'section1',
title: 'First Section',
padding: 10,
html: '(this content will be replaced with an ajax load)'
});
var tab2 = new Ext.Panel ({
id: 'section2',
title: 'Second Section',
padding: 10,
html: '(this content will be replaced with an ajax load)'
});
var tab3 = new Ext.Panel ({
id: 'section3',
title: 'Third Section',
padding: 10,
html: '(this content will be replaced with an ajax load)'
});
var modules_info_panel = new Ext.TabPanel({
region: 'center',
activeTab: 0,
border: false,
defaults:{autoScroll:true},
items:[tab1, tab2, tab3]
});
tab1.update('new content with update'); //works
答案 0 :(得分:6)
创建tab1
时,它是一个具有4个属性的对象。将tab1
作为项添加到标签面板时,标签面板初始化程序将根据tab1
中的属性创建标签。但是,tab1
仍然是一个包含4个属性的对象,而不是对标签面板创建的标签的引用。
我会使用您的4个属性创建一个panel
,并将该面板作为子项添加到标签面板中。
var tab1 = new Ext.Panel({
id: 'section1',
title: 'First Section',
padding: 10,
html: '(this content will be replaced with an ajax load)'
});
然后选项卡面板应该使用您的面板而不是创建自己的面板。
我没有测试过这段代码,但我希望它会对你有所帮助:)。
答案 1 :(得分:0)
modules_info_panel.get(0)
将返回第一个tab对象(默认为Ext.Panel实例),所以:
modules_info_panel.get(0).setTitle('new title');
将设置新标题