2

背景:我正在使用 sencha touch 2 开发 MVC 应用程序。我正在处理一个有两个选项卡的页面。在第一个选项卡中,我在标题栏中有一个按钮。

问题:我无法从按钮处理程序调用任何其他函数。我认为,调用函数的范围存在问题。

这是我的代码。

Ext.define('WUPOC.view.WUHomePage', {
  extend: 'Ext.TabPanel',
  requires:['Ext.TitleBar','Ext.dataview.List','Ext.data.proxy.JsonP'],
  alias: 'widget.wuHomePageView',

  config: {
    fullscreen: true,

    defaults: {
      styleHtmlContent: true
    },

    items: [{
      title: 'Home',
      iconCls: 'home',

      items: [{
        xtype: 'titlebar',
        title: 'Hello',
        docked: 'top',
        items: [{
          xtype: 'button',
          text: 'LogOut',
          ui: 'action',
          itemId: 'newButton',
          align: 'right',
          handler : function(btn){
            console.log('LogOut is tapped');  // This is printed
            this.up.onNewButtonTap();  // Throws error
          }
        }],
      }],
    }, {
      title: 'Contact',
      iconCls: 'user',
      html: 'Contact Screen'
    }]
  },

  onNewButtonTap: function () {
    alert('newNoteCommand');
  },
});

我收到如下错误。

Uncaught TypeError: Object function (selector) {
        var result = this.parent;

        if (selector) {
            for (; result; result = result.parent) {
                if (Ext.ComponentQuery.is(result, selector)) {
                    return result;
                }
            }
        }
        return result;
    } has no method 'onNewButtonTap' 

我认为设置按钮的范围存在问题。请帮忙。

谢谢

4

1 回答 1

4

首先,up是一个函数,所以你需要这样调用它:

this.up();

然后this.up()只会带到按钮的容器中,它没有方法onNewButtonTap。你可以继续做 up() 直到你得到正确的组件,但这会让我更聪明:

  • 将 xtype 添加到您的视图中
  • 将此 xtype 用作 up 函数中的选择器:this.up('myXType').onNewButtonTap();

例子

希望这可以帮助

于 2012-12-13T22:25:05.910 回答