Правильный способ расширения Ext.panel.Панель?

StackOverflow https://stackoverflow.com//questions/12707347

  •  13-12-2019
  •  | 
  •  

Вопрос

Я создаю графический интерфейс для веб-страницы, используя Ext JS 4.1.1.Я попытался создать компонент ('Компонент для поиска генов"ниже), который я могу использовать в более сложных макетах.Но по какой-то причине я не могу вставить экземпляр 'Компонент для поиска генов" в панель управления.Чего мне не хватает при расширении предопределенного 'Внешняя панель.Панель' класс (и при создании моего собственного "виджета")?

Если я удалю вызов на "Ext.create('gene-search-component', ...", все работает;если я вставлю его обратно, все сломается.Интересно, почему?

(Я не включил определение "gene-combobox".Я почти убежден, что это не первопричина моей проблемы.)

Спасибо, что уделили мне время!

Туомас

Ext.define('GeneSearchComponent', {
    extend: 'Ext.panel.Panel',
    alias: ['gene-search-component'],
    constructor: function(cnfg) {
        this.callParent(arguments);
        this.initConfig(cnfg);
    },
    config: {
        collapsible: true,
        frame: true,
        title: 'Search',
        bodyPadding: '15 15 15 15',
        width: 350,
        layout: {
            type: 'vbox', 
            align: 'left'
        },
        items: [
            Ext.widget('gene-combobox', {
                id: 'comboboxid'
            }),
            Ext.create('Ext.Button', {
                text: 'Search',
                handler: function() {
                    dosomething();
        }})]
    },
    onRender: function() {
        this.callParent(arguments);
    }
});

Ext.application({
    name: 'FW',
    launch: function() {
        var bd = Ext.getBody();
        var div = Ext.get("search_form");

        var hpanel = Ext.create('Ext.panel.Panel', {
            id: 'horizontal-panel',
            title: "HBoxLayout Panel",
            layout: {
                type: 'hbox',
                align: 'middle'
            },
            items: [
                Ext.create('Ext.container.Container', {
                    id: 'another-panel',
                    title: "VBoxLayout Panel",
                    width: 250,
                    layout: {
                        type: 'vbox',
                        align: 'left'
                    },
                    items: [{
                        xtype: 'panel',
                        width: 250,
                        title: ' Panel One',
                        flex: 2
                    },{
                        xtype: 'panel',
                        width: 250,
                        title: ' Panel Two',
                        flex: 1
                    },{
                        xtype: 'panel',
                        width: 250,
                        title: ' Panel Three',
                        flex: 1
                }]}),
                Ext.create('gene-search-component', {
                    id: 'searchPanel',
            })],
            renderTo: div,
        });
    }
});
Это было полезно?

Решение

Проблема в том, что вы не указали gene-search-component то widget пространство имен при настройке его псевдонима.

alias: 'widget.gene-search-component'

Кроме того, чтобы повторить комментарии к вашему OP, вы делаете много ненужного ввода, создавая компоненты таким образом, какой вы есть.Вам следует использовать поле xtype, а не использовать Ext.Create везде.Я изменил ваш код, чтобы показать вам, насколько все могло бы быть проще.

http://jsfiddle.net/hzXx8/

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top