在视图(来自它的控制器)上添加动态生成的项目,这是一个工具栏

时间:2011-12-21 02:18:43

标签: extjs view controller extjs4

我遇到了代码中“愚蠢”部分的问题,对我来说,这应该是正常的,但我不明白为什么它会给我带来问题:

控制器

Ext.define('FedertrekDesktop.controller.Taskbar', {
  extend: 'Ext.app.Controller',

  views: [
    'taskbar.Toolbar',
    //'taskbar.Button'
  ],

  showWindow: function(windowName, image, title) {
    //var btn = Ext.create('FedertrekDesktop.view.taskbar.Button', windowName, image, title);
    //this.getView('taskbar.Toolbar').insert(0, btn);
    console.log("tmp: "+this.getView('taskbar.Toolbar').printMsg());
    //console.log('msg: '+this.getView('taskbar.Toolbar').getName());
    console.log('Create window '+windowName+' '+image);
  }
});

查看

Ext.define('FedertrekDesktop.view.taskbar.Toolbar', {
  extend: 'Ext.toolbar.Toolbar',
  alias : 'widget.taskbartoolbar',

  items: [
    {
      xtype: 'tbfill'
    },
    {
      xtype: 'tbseparator'
    },
    {
      xtype: 'button',
      enableToggle: true,
      text: 'Tasks'
    }
  ],

  printMsg: function() {
    console.log("printmsg");
  }
});

实际上我只是尝试调用该自定义函数(printMsg)进行测试。然而似乎缺少这个功能,我真的不明白为什么。我在这里缺少什么?

错误:this.getView(“taskbar.Toolbar”)。printMsg不是函数

任何建议表示赞赏

2 个答案:

答案 0 :(得分:2)

我自己用refs解决了这个问题

结果代码是这一个:

Ext.define('FedertrekDesktop.controller.Taskbar', {
  extend: 'Ext.app.Controller',

  views: [
    'taskbar.Toolbar',
    'taskbar.Button'
  ],

  refs: [
    {
      ref: 'taskbarView',
      selector: 'taskbartoolbar'
    }
  ],

  showWindow: function(windowName, image, title) {
    //var btn = Ext.create('FedertrekDesktop.view.taskbar.Button', windowName, image, title);
    //var btn = Ext.create('Ext.button.Button', { text: "Bla" });
    //this.getView('taskbar.Toolbar').insert(0, btn);
    //var tmp = this.getView('taskbar.Toolbar').create();
    //tmp.add(btn);
    var tmp = this.getTaskbarView();
    tmp.printMsg();
    //console.log('msg: '+this.getView('taskbar.Toolbar').getName());
    console.log('Create window '+windowName+' '+image);
  }
});

据我所知,ExtJS不会像你想象的那样在你的控制器中创建对视图的引用,你必须指定它们!

它们提供了参考的强大功能,这些功能记录在ControllerComponentQuery

使用它们后,我觉得我的代码令人满意。我发布的那个只是一个例子,但从这一点来说,使用 insert 方法有效地向视图添加内容并不难。

答案 1 :(得分:1)

this.getView('taskbar.Toolbar').create().printMsg()

这有用吗?根据文档,getView(String name)返回Ext.Base,它没有你的printMsg函数。