Я новичок в extJS, и, может быть, я просто не знаю правильной стратегии, поэтому вы можете сказать мне лучшее решение, если хотите.make subelements слушать событие extJS
Что я пытаюсь: У меня есть сетка extJS. В двойном клике должен появиться контейнер ExtJS Window (для подробных настроек), в котором есть несколько вкладок. В окне есть функция, позволяющая установить идентификатор элемента с щелчком. Каждая вкладка в окне также нуждается в этом идентификаторе. Поэтому я хочу сообщить каждому контейнеру табуляции через событие об измененном идентификаторе, когда идентификатор изменен в контейнере окна.
Моя проблема заключается в том, что я не могу получить доступ к окну из вкладок, чтобы добавить слушателя, потому что окно не отображается, пока оно не будет открыто в первый раз.
Может быть, вы можете понять мою проблему лучше, если вы посмотрите на мой исходный код:
Окно (setCustomerId() и шоу() вызывается, когда дважды щелкнув на элементе сетки)
Ext.define('myApp.path.view.Edit', {
extend: 'Ext.window.Window',
alias: 'widget.myEdit',
title: 'Edit',
height: 500,
width: 1000,
layout: 'fit',
closeAction: 'hide',
/**
* Initialize my custom event
*/
initComponent: function() {
this.addEvents('customerChanged');
this.callParent();
},
/**
* Sets the current customerId and fires a customerChanged event
* @param {Number} customerId
*/
setCustomerId: function(customerId) {
this.customerId = customerId;
this.fireEvent('customerChanged', this.customerId);
},
/**
* create a container for the editor tabs
*/
items: [{
xtype: 'tabpanel',
items: [
{
xtype: 'myTab'
}
]
}]
})
вкладка пример
Ext.define('myApp.path.view.myTab', {
extend: 'Ext.container.Container',
alias: 'widget.myTab',
title: 'Customer',
layout: 'fit',
/**
* Listen to my custom event
* PROBLEM: works, but only after the window has been displayed one time
*/
afterRender: function() {
this.findParentByType('window').addListener("customerChanged", this.onCustomerChanged)
this.callParent();
},
/**
* Listen to my custom event
* PROBLEM: doesn't work, findParentByType('window') is undefined
*/
initComponent: function() {
this.findParentByType('window').addListener("customerChanged", this.onCustomerChanged)
this.callParent();
},
onCustomerChanged: functio() {}
})
Надеюсь, ты сможешь понять мое намерение. Спасибо!
Совершенно правильно, что функция 'afterRender' вызывается _after_, окно было визуализировано (и initComponent вызывается сразу после его создания, прежде чем он будет визуализирован или добавлен). Кстати, что ваши вкладки нужно знать, прежде чем окно даже будет создано? Я не вижу намерения, что вам нужно id_before_ добавлено ваше окно;) –
Мне не нужен идентификатор, прежде чем вкладка будет выделена. Моя проблема заключалась в том, что я хотел получать информацию каждый раз, когда изменяется идентификатор, и, конечно, когда окно открывается в первый раз. Но, как упоминал Ник, событие активации - лучший способ просто смотреть каждый раз, если идентификатор изменился. – philsch