extjs меняет заголовок панели на событии

У меня есть панель сетки, как это

Ext.define('sCon.view.SalesGrid',{
        extend: 'Ext.grid.GridPanel',
        title: 'Sales Data',

        //other params   

        initComponent: function(){
            this.callParent(arguments);
        }
    });

На событии клика я хочу изменить заголовок этой панели. Мой код внутри контроллера выглядит следующим образом.

Ext.define('sCon.controller.SalesGridController', {
        extend: 'Ext.app.Controller',
        views: ['SalesGrid'],

        // other handlers

        changeTitle: function(newTitle){
            this.getView('SalesGrid').setTitle('title_changed');
        }

В настоящее время говорится, что у него нет функции setTitle(). Но в документах говорится, что на панели сетки есть функция setTitle(). Я также попытался изменить заголовок, используя переменную title

 changeTitle: function(newTitle){
            this.getView('SalesGrid').title = 'title_changed';

Ни один не работает.. Пожалуйста, помогите.

2 ответа

Решение

UPD: вот некоторые refs документы от Sencha для ExtJS 4.1.

использование refs Свойство вашего контроллера, чтобы получить ссылки на любые компоненты.

В вашем примере:

Ext.define('sCon.view.SalesGrid',{
  extend: 'Ext.grid.GridPanel',
  title: 'Sales Data',

  alias: 'widget.salesgrid',

  //other params   

  initComponent: function(){
    this.callParent(arguments);
  }
});

В контроллер добавьте:

refs: [
  { ref: 'salesGrid', selector: 'salesgrid', },
]

Затем вы можете получить доступ к представлению SalesGrid из любой точки вашего контроллера, например this.getSalesGrid(); метод.

В твоем случае:

changeTitle: function(newTitle){
  this.getSalesGrid().setTitle('title_changed');
}

Заметка

В описанном случае ответ webbandit является лучшим для доступа к экземпляру представления, этот остается для пояснения по использованию автоматически сгенерированных геттеров.

Метод выбора, который вы используете, просто дает вам класс, а не его экземпляр!

Вы должны сделать это так

this.getView('SalesGrid').create().setTitle('title_changed');

См API

Другие вопросы по тегам