Sencha:无法调用undefined的方法“更新”

时间:2011-08-22 12:02:26

标签: sencha-touch

在这里,我正在注册我的应用程序:

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与另一个面板,如下所示:(视口包含此容器面板)

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

但是它说:无法调用未定义的方法“更新”

我尝试了不同的变体,例如:     App.detailPanel.update(rec.data); 我试图提供 detailPanel cPanel ID,将它们添加到容器面板中,并尝试使用Ext.get()与它们联系,但这些都不起作用

这里有什么问题?

任何其他建议将不胜感激。 感谢。

1 个答案:

答案 0 :(得分:2)

懒惰的方式:给出面板ID并使用:

Ext.getCmp(id)

推荐方法:将itemId分配给面板并使用:

App.views.viewport.getComponent(itemId)

这将允许您在aby给定时间拥有同一组件的多个实例,第一个示例无效,因为您在DOM树中只能有一个单数id。

此外,getComponent仅适用于存储在items集合中的组件。