【问题标题】:ExtJS: How to call controllers in window.onpopstate?ExtJS:如何在 window.onpopstate 中调用控制器?
【发布时间】:2012-10-03 06:48:55
【问题描述】:

我想在用户向后和向前点击时调用我的控制器。但我无法在 window.onpopstate 中访问我的控制器。我也尝试将我的控制器放入历史状态数据,但它会导致错误。

  1. 尝试在 onpopstate 中访问我的控制器:

    Ext.define('PageController',{
        extend:'Ext.app.Controller',
        onLaunch:function(){
            window.onpopstate = this.onPopState; //trigger the onPopState function when backward and forward
            window.history.pushState(null, '', '/');
        },
        onPopstate:function(s){
            this.someFunction(); //"this" is not PageController, it's PopStateEvent
        },
        someFunction:function(){...}
    });
    
  2. 尝试让我的控制器进入状态:

    Ext.define('PageController',{
        extend:'Ext.app.Controller',
        onLaunch:function(){
            window.onpopstate = this.onPopState; //trigger the onPopState function when backward and forward
            window.history.pushState({'controller':this}, '', '/'); //try to put my controller into state data, which causes error
    
        },
        onPopstate:function(s){
            s.state.controller.someFunction();
        },
        someFunction:function(){...}
    });
    

firebug 中的错误: 未捕获的错误:DATA_CLONE_ERR:DOM 异常 25

那么,如何在 window.onpopstate 中访问我的控制器? 或者是否可以在我的控制器中为向后和向前事件添加侦听器?

【问题讨论】:

    标签: javascript extjs history


    【解决方案1】:

    我终于找到了解决办法!在我的控制器中编写以下代码:

    window.onpopstate = Ext.bind(this.onPopState, this);
    

    这可以将函数范围更改为我的控制器,然后我可以在 onpopstate 中调用我的控制器!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-14
      • 2013-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多