ExtJS4: this.ownerCt в функции initComponent - PullRequest
1 голос
/ 13 марта 2012

Есть ли способ получить доступ к родительскому компоненту (через this.ownerCt) в функции initComponent?

Пытаясь получить к нему доступ через this.ownerCt, я обнаружил, что атрибут ownerCt установлен после initComponent. Поэтому я не знаю, как я могу подключиться к процессу инициализации моего компонента, где я могу изменить атрибуты некоторых родителей.

Ответы [ 2 ]

1 голос
/ 13 марта 2012

Я знаю, что это не отвечает на вопрос напрямую. Я бы разместил это в комментариях к вашему вопросу, но мне пока не разрешено. Если вы строите панировочные сухари. Я бы посмотрел на расширение панели вкладок и создание плагина для панели вкладок, который создает вид навигации, который вы хотите.

Ext.define('HOD.plugins.Breadcrumbs', {

    // private
    init : function(tabBar) {
        tabBar.on('beforeadd', this.addIcons, this);
        tabBar.on('beforeremove', this.handleTabRemove, this);
    },

    addIcons: function(tabBar, newTab, index, options) {
        if (index > 0) {
            newTab.iconCls = 'icon-arrow';
            tabBar.items.each(function(tab) {
                if (tab != newTab) {
                    tab.overCls = 'breadcrumbs-over'
                }
            });
        }
    },

    handleTabRemove: function(tabBar, oldTab, options) {
        var count = tabBar.items.getCount();
        if (count > 1) {
            var newTab = tabBar.items.getAt(count-2);
            newTab.overCls = '';
            newTab.removeCls('x-tab-breadcrumbs-over');
        }
    }
});

Затем расширьте панель вкладок, чтобы она использовала плагин выше для правильного оформления вкладок.

Ext.define('HOD.view.GlobalNavigation', {
    extend: 'Ext.tab.Panel',
    border: false,
    alias: 'widget.content',
    requires: ['HOD.plugins.Breadcrumbs'],
    tabBar: {
        cls: 'breadcrumbs',
        plugins: ['tabbarbreadcrumbs']
    },

    initComponent: function() {
        this.on('tabchange', this.handleTabChange, this);
        this.callParent(arguments);
    },

    push: function(tab) {
        this.add(tab);
        this.setActiveTab(tab);
    },

    pop: function() {
        // Get the current cards;
        var cards = this.getLayout().getLayoutItems();
        if (cards.length > 1) {
            this.setActiveTab(cards[cards.length-2]);
        }
    },

    handleTabChange: function (tabPanel, newCard, oldCard, options) {
        var cards = tabPanel.getLayout().getLayoutItems();

        for (var i = (cards.length - 1); i > 0; i--) {
            if (cards[i] !== newCard) {
                this.remove(cards[i]);
            } else {
                break;
            }
        }
    }
});

Я написал пост об этом здесь, если вам нужно больше деталей .

0 голосов
/ 13 марта 2012

Я бы не советовал что-либо менять в контейнере из функций внутреннего элемента. Вместо этого я бы создал событие в элементе, запустил это событие и прослушал его в контейнере.

Таким образом, ваш компонент уведомит контейнер о необходимости что-то сделать, а контейнер сделает это сам.

...