如何在Ext.Button处理程序中使用up()

时间:2012-12-13 21:23:23

标签: sencha-touch sencha-touch-2

Back Ground :我正在使用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' 

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

谢谢

1 个答案:

答案 0 :(得分:4)

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

this.up();

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

  • 在视图中添加xtype
  • 在up函数中使用此xtype作为选择器:this.up('myXType').onNewButtonTap();

Example

希望这有帮助