Ext.Msg.confirm - 对象[对象窗口]没有方法'...'

时间:2012-06-26 17:35:13

标签: sencha-touch-2 sencha-architect

我试图在按下注销按钮时设置确认消息,如果用户单击“是”,则会在名为“myContainer”的容器中重定向到面板控件。消息显示正常,但是当我选择“是”时,我收到错误(假设因为容器未初始化)。我的控制器上有一个参考设置到容器,但这似乎没有帮助。有关如何正确处理确认的任何建议,这是值得赞赏的。感谢

确认消息:

onLogoutTap: function(button, e, options) {
Ext.Msg.confirm("Logout", "Do you wish to continue?", function(button){
    if (button == 'yes') {
    //doesn't work:
        this.getMyContainer().setActiveItem(1);
    } else {
        return false;
    }
});
}

Controller中的myContainer参考

myContainer: '#myContainer'

错误讯息:

Uncaught TypeError: Object [object Window] has no method 'getMyContainer'

3 个答案:

答案 0 :(得分:5)

我经常使用的一个小技巧是

onLogoutTap: function(button, e, options) {
  var controller = this;
  Ext.Msg.confirm("Logout", "Do you wish to continue?", function (button) {
    if (button == 'yes') {
    //doesn't work:
        controller.getMyContainer().setActiveItem(1);
    } else {
        return false;
    }
  });
}

同样,您仍然可以使用关键字this访问函数对象。

希望这有帮助

答案 1 :(得分:1)

下面:

function(button){
    if (button == 'yes') {
    //doesn't work:
        this.getMyContainer().setActiveItem(1);
    } else {
        return false;
    }

this指的是你的函数对象,而不是控制器。

如果要调用控制器的该方法,请尝试:

Ext.getApplication().getController("your_controller_name").getMyContainer();

希望它有所帮助。

答案 2 :(得分:0)

另一种方式是

onLogoutTap: function(button, e, options) {
    Ext.Msg.confirm("Logout", "Do you wish to continue?", function(button){
        if (button == 'yes') {
        //DOES WORK!!
            this.getMyContainer().setActiveItem(1);
        } else {
            return false;
        }
    }, this);
}

只需在函数定义后添加'scope'参数。