Как я могу обновить содержимое вкладки в TabPanel в ExtJS?

у меня есть панель вкладок, как это:

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 Я не хочу добавить вкладки динамически как предложено в данном вопросе но хочу, чтобы вкладки, чтобы быть виден с первой загрузки и содержимое каждой вкладки, чтобы быть изменить динамически при нажатии.

как я могу изменить содержимое вкладки после ее создания?

обновление:

спасибо @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

2 ответов


при создании tab1 это объект с 4 свойствами. При добавлении tab1 как элемент на панели вкладок инициализатор панелей вкладок создаст вкладку на основе свойств из tab1. Ваш tab1 по-прежнему является объектом с 4 свойствами, а не ссылкой на вкладку, созданную вашей панелью вкладок.

Я бы создал panel С вашими 4 свойствами и добавьте эту панель в качестве дочернего элемента на панели вкладок.

var tab1 = new Ext.Panel({
    id: 'section1',
    title: 'First Section',
    padding: 10,
    html: '(this content will be replaced with an ajax load)'
});

затем панель вкладок следует использовать вашу панель вместо создания собственной панели.

Я не тестировал этот код, но надеюсь, что он вам поможет:)


modules_info_panel.get(0) вернет первый объект tab (по умолчанию Ext.Экземпляр панели) Итак:

 modules_info_panel.get(0).setTitle('new title');

будет установлен новый заголовок