2

showイベントについて質問があります。私のアプリケーションではpainted、次のようにパネルのイベントを処理しています。

Ext.define('mvcTest.controller.Test', {
    extend: 'Ext.app.Controller',
    config: {
    refs: {
            panel: '#testpanel'
    },
    control:{
                panel: {
                    painted: 'onPainted'        
                }
        }
    },
    onPainted: function(){
        alert('painted');
    }
});

ドキュメンタリーは、「ショー」イベントもあると言っていますが、それはまったく解雇されません:

Ext.define('mvcTest.controller.Test', {
    extend: 'Ext.app.Controller',
    config: {
    refs: {
            panel: '#testpanel'
    },
    control:{
                panel: {
                    show: 'onShow'        
                }
        }
    },
    onShow: function(comp, obj){
        alert('show');
    }
});

なぜこれが機能しないのですか?アラートは間違った方法ですが、それは問題ではありません。ありがとう、マイク

4

3 に答える 3

9

コントローラーに間違いはないようです。主な理由はアプリケーションの別の部分にあるかもしれませんが...私の経験によると...わかりました:

  • paintedイベントは簡単です。ビューが実際に画面にレンダリングされるたびに、painted起動されます。(注:paintedビューの子コンポーネントが完全にレンダリングされる前にイベントが発生します。言い換えると、painted最初にDOMが生成されます。)

  • show特にビューの初期化時に、イベントが発生するとは限りません。showイベントは、最初に何らかの方法でビューを非表示にし、後で表示したときに発生するものです。

ただの経験、変種かもしれません。しかし、それがあなたに役立つかもしれないことを願っています。

于 2012-06-04T09:32:23.467 に答える
6

コントローラで「ペイントされた」イベントを処理することはできません。これは、それにバブルされていないためです。

sencha docsから:このイベントは、イベント委任で使用することはできません。代わりに、パフォーマンス上の理由から、少なくとも1つのリスナーを明示的に追加した場合にのみ「painted」が起動します。パネルでリスナーを定義することで処理できます。

Ext.define('MyApp.view.MyPanel', {
  extend: 'Ext.Panel',
  config: {
  },
  listeners: {
    painted: function (element, options) {
      console.log("I've painted");
    }
  }
});

ただし、「show」イベントはコントローラーで処理できます。アプリケーションの別の部分がそのコントローラーを参照しているかどうかを確認します。(コントローラーへの参照を提供しましたか?パネルのIDは正しいですか?)

于 2012-06-03T19:30:10.790 に答える
0

私はこれが古いスレッドであることを知っていますが、誰かがそれを役に立つと思うかもしれません:Senchaは最初にイベント「show」と「painted」を起動しません。最初にトリガーする必要があります。

このコードスニペットを使用して、コントローラーからのイベントをリッスンします。

Ext.define('MyApp.view.MyPanel', {
  extend: 'Ext.Panel',
  config: {
  },
  listeners: {
    painted: function (element, options) {
      this.fireEvent('painted', [element, options])
    }
  }
});
于 2017-02-07T10:39:29.033 に答える