Сенча: не могу вызвать метод "обновление" из неопределенного - PullRequest
1 голос
/ 22 августа 2011

Здесь я регистрирую свое приложение:

App = new Ext.Application({
  name: "App",

  launch: function() {
    this.views.viewport = new this.views.Viewport();
  }
});

Так я регистрирую новые панели и компоненты.Я поместил каждый из них в отдельные js-файлы.

App.views.Viewport = Ext.extend(Ext.TabPanel, {
    fullscreen: true,

    tabBar: {
      dock: 'bottom',
      layout: {
        pack: 'center'
      }
    },

    items: [
      {
        xtype: 'cPanel'
      },
      {
        xtype: 'anotherPanel'
      }
    ]
});

// register this new extended type
Ext.reg('App.views.viewport', App.views.Viewport);

Я добавил другие компоненты таким же образом.

В одном из моих компонентов, который является представлением списка, я хочу изменитьActiveItem панели контейнера с другой панелью, когда она переворачивается на элемент, например так: (Viewport содержит эту панель контейнера)

App.views.ListApp = Ext.extend(Ext.List, {
  store: App.store,
  itemTpl: "...",
  onItemDisclosure: function(record) {
    App.detailPanel.update(record.data);
    App.cPanel.setActiveItem("detailPanel");
  },
  listeners: {
    itemtap: function(view, index, item, e) {   
        var rec = view.getStore().getAt(index);
        App.views.detailPanel.update(rec.data);
        App.views.cPanel.setActiveItem("detailPanel", {type:"slide", direction: "left"});
    }
  }

});

App.views.detailPanel.update(rec.data);

Но он говорит: не может вызвать метод "update" из неопределенного

Я пробовал разные варианты в этой строке, например: App.detailPanel.update (rec.data);и я попытался указать идентификаторы detailPanel и cPanel , где они были добавлены на панель контейнера, и попытался связаться с ними с помощью Ext.get (), но ни один из них не сработал.1020 *

В чем здесь проблема?

И любые другие советы будут оценены.Спасибо.

1 Ответ

2 голосов
/ 23 августа 2011

Ленивый способ: дать идентификаторы панелей и использовать:

Ext.getCmp(id)

Рекомендуемый способ: назначьте itemId на панель и используйте:

App.views.viewport.getComponent(itemId)

Это позволит вам иметь более одного экземпляра одного и того же компонента в любой момент времени, первый пример недопустим, потому что вы можете иметь только одиночный идентификатор в дереве DOM.

Также getComponent работает только для компонентов, хранящихся в коллекции элементов.

...