Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.04.2011, 14:00
dem dem вне форума
Новичок на форуме
Отправить личное сообщение для dem Посмотреть профиль Найти все сообщения от dem
 
Регистрация: 10.04.2011
Сообщений: 5

Как правильно создавать компоненты?
пишу вот так:
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, но я что-то видимо не понял.
Ответить с цитированием
  #2 (permalink)  
Старый 10.04.2011, 14:20
Профессор
Отправить личное сообщение для Matre Посмотреть профиль Найти все сообщения от Matre
 
Регистрация: 07.01.2011
Сообщений: 582

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.
Ответить с цитированием
  #3 (permalink)  
Старый 10.04.2011, 14:36
dem dem вне форума
Новичок на форуме
Отправить личное сообщение для dem Посмотреть профиль Найти все сообщения от dem
 
Регистрация: 10.04.2011
Сообщений: 5

Вы точно на JS пишете? Я почему, то вижу C# или C++

Синтаксиса с -> и с описанием типа переменной вида:

Component[] public x = 10;

я не встречал/
Ответить с цитированием
  #4 (permalink)  
Старый 10.04.2011, 16:08
VKS VKS вне форума
Профессор
Отправить личное сообщение для VKS Посмотреть профиль Найти все сообщения от VKS
 
Регистрация: 24.09.2010
Сообщений: 178

Вы хотите создавть пренастроенные классы или новые компоненты, без участия существующих компонентов extjs?
Ответить с цитированием
  #5 (permalink)  
Старый 10.04.2011, 16:15
VKS VKS вне форума
Профессор
Отправить личное сообщение для VKS Посмотреть профиль Найти все сообщения от VKS
 
Регистрация: 24.09.2010
Сообщений: 178

Вообще основную идею как писать абстрактный преднастроенный класс можно взять отсюда
http://tdg-i.com/364/abstract-classes-with-ext-js
http://blog.extjs.eu/know-how/factor...xt-extensions/
Ответить с цитированием
  #6 (permalink)  
Старый 11.04.2011, 17:36
dem dem вне форума
Новичок на форуме
Отправить личное сообщение для dem Посмотреть профиль Найти все сообщения от dem
 
Регистрация: 10.04.2011
Сообщений: 5

VKS я понял.

1) Просто как я вижу xtype создает новый экземпляр этого класса.

2) Я хочу создать преднастроенный класс в котором не содератся настройки лайоута. А настройки лайоута делать уже в том месте где пишу xtype. Почему, то не получалось.
Ответить с цитированием
  #7 (permalink)  
Старый 11.04.2011, 19:07
VKS VKS вне форума
Профессор
Отправить личное сообщение для VKS Посмотреть профиль Найти все сообщения от VKS
 
Регистрация: 24.09.2010
Сообщений: 178

Описываем абстрактный класс, куда выносим то, что у нас планируется использовать во всех компонентах такого типа, данный абстрактный класс пустой.

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}]
    });

Последний раз редактировалось VKS, 11.04.2011 в 19:17.
Ответить с цитированием
  #8 (permalink)  
Старый 15.04.2011, 13:10
Аватар для viy.li
Аспирант
Отправить личное сообщение для viy.li Посмотреть профиль Найти все сообщения от viy.li
 
Регистрация: 23.02.2011
Сообщений: 49

a в ответ тишина...
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как правильно передать значение переменной? kentnsk Общие вопросы Javascript 6 25.02.2011 11:49
Подскажите как правильно оформить код frolvict Общие вопросы Javascript 4 30.04.2010 10:51
Как правильно в Мазилле обращаться к фреймам и к их объектам? $Dim@n$777 Firefox/Mozilla 6 29.03.2009 23:32
Как правильно обработать событие? BAnder Events/DOM/Window 19 03.02.2009 14:09
Как правильно оформить Send() Алекс97 AJAX и COMET 20 30.10.2008 19:19