2

トグルボタンがあります:

        var button =  new Ext.Button({
        tooltip: "Интенсивность",
        iconCls: "gxp-icon-intensity",
        enableToggle:true,
        toggleHandler: function (button, state) {
            if(state){
                alert(state)
                map.getLayersByName("Интенсивность")[0].setVisibility(true);
                intWin.show();
            }else{
                map.getLayersByName("Интенсивность")[0].setVisibility(false);
                alert(intWin.collapsed);
                //intWin.close();
            }
        }
    });

ボタンを切り替えると、ウィンドウが表示されます。

    var intWin = new Ext.Window({
        id: 'intWin', 
        layout: 'fit',
        title:'Интенсивность',
        autoScroll:false,
        width:300,
        items:[/*intForm*/]
    });

ウィンドウを閉じると、ボタンのトグルが解除されます。しかし、もう一度クリックしてもウィンドウが表示されません。Firebug には次のエラーが表示されます。

 TypeError: b.dom is undefined

...String(this.enableUrlEncode)?this.enableUrlEncode:"data"]=Ext.encode(b);g.params...

ここで何が問題なのですか?

アップデート

オーケー、悪い。破壊された要素を表示しようとしました。

しかし、この場合:
1 ウィンドウを閉じて破棄すると、このウィンドウ内のフォームも破棄されますか?
2 ウィンドウが破棄されていることを確認するにはどうすればよいですか?

更新2

ここで、ウィンドウを作成するためにこの関数を試します。

    function intWinCreate(){
        var intWin = new Ext.Window({
            id: 'intWin', 
            layout: 'fit',
            title:'Интенсивность',
            autoScroll:false,
            width:300,
            items:[/*intForm*/]
        });
    };

そしてボタンハンドラーで:

                intWinCreate();
                intWin.show();

しかし、私はエラーが発生します:

  ReferenceError: intWin is not defined

関数に入れるintWin.show();と、そのウィンドウが表示されます。
何が間違っている可能性がありますか?

4

2 に答える 2

5

要素が破棄されると、その中のすべても破棄されます。

あなたの場合、閉じるアクションのデフォルトの動作を非表示に変更するには、プロパティを設定してcloseAction: 'hide'、ウィンドウが破壊されるのではなく非表示になるようにします。

元:

var intWin = new Ext.Window({
    id: 'intWin', 
    layout: 'fit',
    closeAction: 'hide',
    title:'Интенсивность',
    autoScroll:false,
    width:300,
    items:[/*intForm*/]
});

更新:メソッドのローカル変数である
ためです。できることは、メソッドからウィンドウを返し、それに対して show を呼び出すことです。intWinintWinCreate

function intWinCreate(){
    return new Ext.Window({
        id: 'intWin', 
        layout: 'fit',
        title:'Интенсивность',
        autoScroll:false,
        width:300,
        items:[/*intForm*/]
    });
};

それで

intWinCreate().show()
于 2013-05-15T07:16:39.483 に答える