0

ユーザーが前後にクリックしたときにコントローラーを呼び出したい。しかし、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 のエラー: Uncaught Error: DATA_CLONE_ERR: DOM Exception 25

次に、 window.onpopstate でコントローラーにアクセスするにはどうすればよいですか? または、コントローラーの前後のイベントにリスナーを追加することは可能ですか?

4

1 に答える 1

2

私はついに解決策を見つけました!私のコントローラーに次のコードを書いてください:

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

これにより、関数スコープがコントローラーに変更され、コントローラーをonpopstateで呼び出すことができます。

于 2012-10-05T07:39:25.667 に答える