Как правильно создавать компоненты?
пишу вот так:
menuPanel = function () { menuPanel.superclass.constructor.call(this, { animate:true, enableDD:false, loader: new Ext.tree.TreeLoader(), // Note: no dataurl, register a TreeLoader to make use of createNode() lines: true, title: 'Меню', id:'treepanel', region:'west' ,layout:'fit' ,frame:true ,border:false ,width:200 ,split:true ,collapsible:true ,collapseMode:'mini', root: new Ext.tree.AsyncTreeNode({ text: 'Autos', draggable:false, children: json }), rootVisible:true, }); } Ext.extend(menuPanel,Ext.tree.TreePanel,{}); Ext.reg('menutree', menuPanel); потом: var main_viewport = new Ext.Viewport({ layout:'border', title:'Основное окно', items:[ { id:'treepanel', xtype: 'menutree', pnl ] }); Все работает, но мне не нравится что настройки позиционирования в компоненте. Если я делаю, вот так: menuPanel = function () { menuPanel.superclass.constructor.call(this, { animate:true, enableDD:false, loader: new Ext.tree.TreeLoader(), // Note: no dataurl, register a TreeLoader to make use of createNode() lines: true, title: 'Меню', id:'treepanel', root: new Ext.tree.AsyncTreeNode({ text: 'Autos', draggable:false, children: json }), rootVisible:true, }); } Ext.extend(menuPanel,Ext.tree.TreePanel,{}); Ext.reg('menutree', menuPanel); //А потом: var main_viewport = new Ext.Viewport({ layout:'border', title:'Основное окно', items:[ { id:'treepanel', xtype: 'menutree', region:'west' ,layout:'fit' ,frame:true ,border:false ,width:200 ,split:true ,collapsible:true ,collapseMode:'mini' }, pnl ] }); То панель не появляется. Как мне сделать основные части системы компонентами без настроек отображения, а потом создавать их экземпляры донастраивая. Мне нравится идея с xtype, но я что-то видимо не понял. |
Ext -> class[] Component : namespace { // Объявляем класс потомка родителя суперкласса прототипа public method(a) { // Публичный метод класса в JS — самое обычное дело. Как и компонент return a; } } class[][] Component[] extend namespace; // Иницализируем эту хрень ... Component[] public x = 10; // Мы даже можем добавить свойства в наш потомок родителя суперкласса прототипа! ... Component foo = new Component; // Запускаем эту хрень foo :: method( foo :: x ); // 10 JS такой JS. |
Вы точно на JS пишете? Я почему, то вижу C# или C++
Синтаксиса с -> и с описанием типа переменной вида: Component[] public x = 10; я не встречал/ :blink: |
Вы хотите создавть пренастроенные классы или новые компоненты, без участия существующих компонентов extjs?
|
Вообще основную идею как писать абстрактный преднастроенный класс можно взять отсюда
http://tdg-i.com/364/abstract-classes-with-ext-js http://blog.extjs.eu/know-how/factor...xt-extensions/ |
VKS я понял.
1) Просто как я вижу xtype создает новый экземпляр этого класса. 2) Я хочу создать преднастроенный класс в котором не содератся настройки лайоута. А настройки лайоута делать уже в том месте где пишу xtype. Почему, то не получалось. |
Описываем абстрактный класс, куда выносим то, что у нас планируется использовать во всех компонентах такого типа, данный абстрактный класс пустой.
Ext.ns('App'); App.AbstractPanel = Ext.extend(Ext.Panel, { initComponent: function() { // create config object var config = {}; // build config this.buildConfig(config); // apply config Ext.apply(this, Ext.apply(this.initialConfig, config)); // call parent App.AbstractPanel.superclass.initComponent.call(this); }, // eo function initComponent buildConfig: function(config) { this.buildItems(config); }, // eo function buildConfig buildItems: function(config) { config.items = undefined; } // eo function buildItems }); Пишем свой преднастроенный класс Ext.ns('App.Catalog'); App.Catalog.Panel = Ext.extend(App.AbstractPanel, { buildItems:function(config) { config.items = [{ title : 'Левая панель', region : 'west', layout : 'fit', width : 260, split : true, collapsible : true, autoScroll : true, margins : '5 0 5 5', cmargins : '5 5 5 5' },{ title : 'Правая панель', region : 'center', layout : 'fit', margins : '5 5 5 0', cmargins : '5 5 5 0' }]; } // eo function buildItems }); // Register xtype Ext.reg('catalogpanel', App.Catalog.Panel); Ну и далее уже где вам нужно вызывете catalogpanel через xtype, например в лайоуте, например: var main_viewport = new Ext.Viewport({ layout:'border', title:'Основное окно', items:[{xtype: 'catalogpanel', layout: 'border', border: false}] }); |
a в ответ тишина...
|
Часовой пояс GMT +3, время: 22:32. |