1

我正在尝试在按下注销按钮时设置确认消息,如果用户单击“是”,则将被重定向到名为“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;
    }
});
}

控制器中的 myContainer 引用

myContainer: '#myContainer'

错误信息:

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

3 回答 3

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

希望这可以帮助

于 2012-06-26T17:42:36.330 回答
1

这里:

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

this指的是您的功能对象,而不是控制器。

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

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

希望能帮助到你。

于 2012-06-26T17:39:13.027 回答
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);
}

只需在函数定义后添加“范围”参数即可。

于 2012-06-26T18:09:43.750 回答