Как ссылаться на объект-контейнер предка из элемента управления ExtJS? - PullRequest
11 голосов
/ 13 мая 2011

Я использую ExtJS для создания окна, содержащего несколько панелей в качестве элементов.Одна из этих панелей содержит кнопку.

Я хочу прикрепить обработчик к своей кнопке так, чтобы при нажатии на кнопку я мог скрыть окно, содержащее вышеупомянутые панели и эту кнопку.

Мой вопрос: как я могу получить ссылку на родительское окно моей кнопки БЕЗ ссылки на окно по идентификатору?Я буквально хочу ссылку на экземпляр Ext.Window, а не на экземпляр Ext.Panel, который содержит мою кнопку.

Примечание: я не хочу ссылаться на окно по id, потому что я создаю подкласс класса Ext.Windowи, следовательно, идентификатор окна не всегда будет одинаковым.Короче говоря, я создаю класс мастера, и когда я нажимаю кнопку «Отмена» мастера, я хочу скрыть окно мастера, содержащее кнопку.

Вот мой код:

var newWizardWindow = new WizardWindow({
  id: 'newWizardWindow',
  title: 'New',
  items: [
    ...
  ],   
  buttons: [{
    text: 'Cancel',
    handler: function() {
      // REFERENCE WizardWindow instance here.
    }
  },{
    id: 'newWizardPreviousButton',
    text: '« Previous',
    disabled: true,
    handler: newWizardNavigator.createDelegate(this, [-1])
  },{
    id: 'newWizardNextButton',
    text: 'Next »',
    handler: newWizardNavigator.createDelegate(this, [1])
  }],
  listeners: {
    …
  }
});

Вот некоторые идеи, которые я выдвинул, как скрыть окно:

  1. this.ownerCt.ownerCt (это кнопка).Не благоприятно, как в будущем обновлении ExtJS, число родителей между окном и кнопкой может измениться.
  2. Каким-то образом сохранить ссылку на экземпляр WizardWindow в классе WizardWindow.
  3. Найтиближайший класс WizardWindow [CSS] в стиле jQuery: $ (this) .closest ('. wizardWindow').Может быть this.findByParentType ('WizardWindow')?

Ответы [ 4 ]

9 голосов
/ 13 мая 2011

Как насчет того, чтобы попробовать метод findParentByType(...)?Я помню, как использовал его несколько раз.

findParentByType (String / Ext.Component / Class xtype, [Boolean shallow]): Ext.Container

Найдите контейнер над этим компонентом на любом уровне по типу или типу.

Здесь вы можете использовать xtype вместо id как ссылка, и xtype одинаков независимо от того, какой у вас экземпляр этого типа.

buttons: [{
    text: 'Cancel',
    handler: function() {
        // REFERENCE WizardWindow instance here.
        var parentWindow = this.findParentByType('xtypelizardwindow');
    }
}]
2 голосов
/ 13 мая 2011

Вы можете передать ссылку как область.

buttons: [{
    text: 'Cancel',
    scope:this,
    handler: function() {
    }
}]
1 голос
/ 13 мая 2011

В вашей конфигурации для вашей кнопки, в качестве родственного элемента для вашего свойства обработчика, вы можете добавить свойство scope: newWizardWindow?Я не уверен на 100%, сработает ли это, но думаю, что сработаетЭто установит область действия вашего обработчика кнопки как окно, а внутри функции обработчика вы можете просто сделать это. Hide ();

0 голосов
/ 16 июня 2011

this.ownerCt также дает ссылку на родительский объект, который является контейнером.так как он использует this.findParentByType (parent xtype)

...