5

我有一个像这样的网格面板

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() 功能。我还尝试使用“标题”变量更改标题,例如

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

两者都不起作用..请帮忙。

4

2 回答 2

9

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');
}
于 2012-09-03T11:54:02.363 回答
3

笔记

在所描述的情况下,webbandit 答案是访问视图实例的最佳选择,这个答案留待澄清使用自动生成的 getter。

您使用的选择器方法只是为您提供类而不是它的实例!

你应该这样做

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

API

于 2012-09-03T12:05:13.367 回答