Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.04.2010, 12:11
Аспирант
Отправить личное сообщение для nikolaich Посмотреть профиль Найти все сообщения от nikolaich
 
Регистрация: 16.03.2009
Сообщений: 33

измененить свойство базового класса
Создаю класс.
MyWindow = Ext.extend(Ext.Window,{
		
	initComponent: function(){
	var config = {
		width: 500,
		height: 300	
	};
	
	Ext.apply(this, Ext.apply(this.initialConfig, config));
	
	MyWindow.superclass.initComponent.apply(this, arguments);
	},
	buttons: [{text: 'First Button'},	
		{text: 'Second Button'}	
	]

			
});


Дальше при создании объекта этого класса как мне добавить третью кнопку в создаваемое окно?

Ext.onReady(function() {
	win = new MyWindow({
	    buttons: ?
	});
	

	win.show();
});
Ответить с цитированием
  #2 (permalink)  
Старый 07.04.2010, 17:29
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Так не получится. В данном случае придётся создавать ещё один класс, наследуемый от MyWindow, у которого в initComponent добавлять в this.buttons ещё одну кнопку (до вызова родительского initComponent). Или же добавить в MyWindow возможность указания дополнительных кнопок в отдельном свойстве.
Ответить с цитированием
  #3 (permalink)  
Старый 07.04.2010, 18:53
Аспирант
Отправить личное сообщение для nikolaich Посмотреть профиль Найти все сообщения от nikolaich
 
Регистрация: 16.03.2009
Сообщений: 33

Спасибо.
Первый вариант, предложенный Вами я пробовал. А вот как должен выглядеть второй не могу понять.

Если не трудно, можно пример вот для этого:
"Или же добавить в MyWindow возможность указания дополнительных кнопок в отдельном свойстве".
Ответить с цитированием
  #4 (permalink)  
Старый 07.04.2010, 19:23
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

MyWindow = Ext.extend(Ext.Window,{
         
    initComponent: function(){
    var config = {
        width: 500,
        height: 300
    };
     
    Ext.apply(this, Ext.apply(this.initialConfig, config));

    if (this.extraButtons) {
        // Добавляем кнопки из extraButtons в this.buttons. 
        // Но this.buttons.push здесть использовать нельзя, иначе эти кнопки добавятся в прототип.
        // Проще всего клонировать this.buttons, после чего добавить новые.
        // Вариантов много впрочем.
    }
     
    MyWindow.superclass.initComponent.apply(this, arguments);
    },
    buttons: [{text: 'First Button'},  
        {text: 'Second Button'}
    ]
 
             
});
Ответить с цитированием
  #5 (permalink)  
Старый 07.04.2010, 19:40
Аспирант
Отправить личное сообщение для nikolaich Посмотреть профиль Найти все сообщения от nikolaich
 
Регистрация: 16.03.2009
Сообщений: 33

Спасибо.
Ответить с цитированием
  #6 (permalink)  
Старый 06.07.2010, 12:13
Аспирант
Отправить личное сообщение для serega063 Посмотреть профиль Найти все сообщения от serega063
 
Регистрация: 29.05.2010
Сообщений: 33

А можно поподробней расписать первый вариант?
Ответить с цитированием
  #7 (permalink)  
Старый 06.07.2010, 12:18
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

initComponent: function() {
    this.buttons.add({text: 'button'});
    MyClass.superclass.initComponent.apply(this, arguments);
}

Как-то так.
Ответить с цитированием
  #8 (permalink)  
Старый 06.07.2010, 16:23
Аспирант
Отправить личное сообщение для nikolaich Посмотреть профиль Найти все сообщения от nikolaich
 
Регистрация: 16.03.2009
Сообщений: 33

Появился еще один вопрос.
Создаю один класс. От него наследую второй. Во втором тремя способами прописываю свойство myArr.
Затем создаю объект первого класса. Вызываю метод. В первых двух вариантах выводит пустое сообщение. А в третьем, то что я занес в свойство myArr, когда создавал класс secondWindow.
Почему так?

firstWindow = new Ext.extend(Ext.Window,{
	myArr: [],
	width:200,
	height:200,
	initComponent: function(){	
		var config = {};
		
		firstWindow.superclass.initComponent.apply(this, arguments);
		Ext.apply(this, Ext.apply(this.initialConfig, config), firstWindow.superclass.initialConfig);
		
	}, // end init
	doAlert:function(){
		Ext.Msg.alert('test', this.myArr['0'] + this.myArr['1']);
	}
});

// создаю наследник
secondWindow = new Ext.extend(firstWindow,{
	initComponent: function(){	
		var config = {};
		
		// 1- й вариант работы с свойством в видем массива
		//var a = [];
		//a.push('first');
		//a.push(' test');
		//this.myArr = a;
		
		// 2-й вариант работы с свойством в видем массива		
		//this.myArr = ['second',' test'];
		
		// 3-й вариант работы с свойством в видем массива		
		this.myArr.push('third');
		this.myArr.push(' test');
		
		secondWindow.superclass.initComponent.apply(this, arguments);
		Ext.apply(this, Ext.apply(this.initialConfig, config), secondWindow.superclass.initialConfig);

	
	}
});

win = new firstWindow({});
	
Ext.onReady(function() {
	win.doAlert();
}
Ответить с цитированием
  #9 (permalink)  
Старый 06.07.2010, 16:32
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

У вас массив содержится в свойстве myArr прототипа конструктора firstWindow. Т.е. этот массив один на все объекты, порождаемые конструктором firstWindow и наследуемыми (в данном случае ещё и secondWindow).

Вообще со свойствами, содержащими ссылки на объекты, надо быть поаккуратней, и стараться определять их в initComponent.
Ответить с цитированием
  #10 (permalink)  
Старый 06.07.2010, 16:44
Аспирант
Отправить личное сообщение для nikolaich Посмотреть профиль Найти все сообщения от nikolaich
 
Регистрация: 16.03.2009
Сообщений: 33

Т.е. получается, если я использую push(), то просто работаю с массивом, который прописан в самом верхнем классе.
А в двух первых вариантах я просто свойству присваиваю массив. Т.е. этому свойству присваиваю ссылку уже на другой массив.
Что-то типа такого?
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос про ООП, цепочки прототипов. Shaci Общие вопросы Javascript 5 27.01.2010 14:50
Свойство opener обнуляется при обновлении страницы LesPaulFAP Events/DOM/Window 0 12.10.2009 13:09
Переопределение метода базового класса walash jQuery 18 15.07.2009 17:05