Добавление динамически сгенерированного элемента в представление (из его контроллера), которое является панелью инструментов - PullRequest
1 голос
/ 21 декабря 2011

У меня проблема с «глупой» частью кода, которая, по-моему, должна работать прямо, но я не понимаю, почему это вызывает у меня проблемы:

контроллер

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);
  }
});

view

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 ]

2 голосов
/ 22 декабря 2011

Я решил проблему самостоятельно с помощью ссылок

Вот код результата:

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 не создает ссылки на представления в вашем контроллере, как я думал, вы должны указать их!

Они предлагают мощную функцию ссылок, которые описаны на Контроллере и ComponentQuery

После их использования я чувствую себя удовлетворительно с моим кодом. Тот, который я опубликовал, является лишь примером, но с этой точки зрения нетрудно эффективно добавить что-либо в представление с помощью метода insert .

1 голос
/ 21 декабря 2011
this.getView('taskbar.Toolbar').create().printMsg()

Это работает?Согласно документации, getView(String name) возвращает Ext.Base, в котором нет функции printMsg.

...