2009-08-27 12 views
3

基本的には、複数の場所で共有されているアイテムを持つformPanelを含むウィンドウがあります。 formPanelのアイテムが多少異なる可能性があることを意味します。 (コントロールの種類)。ExtJS - FormPanelアイテムのクリア&動的リロード

私は、ウィンドウ上の適切な状況のカスタムボタンを動的にクリアして追加することができました。

しかし、私はformPanelのアイテムに少し問題があります。ソースに掘り下げる

は、私がExt.Container initComponentメソッド内のコードのこの小さな作品があることを見出し:

var items = this.items; 
if(items){ 
    delete this.items; 
    if(Ext.isArray(items)){ 
     this.add.apply(this, items); 
    }else{ 
     this.add(items); 
    } 
} 

これは私が達成しようとしているものに似ているように思えます。 もう一度、このコードを呼び出しますformPanel.addメソッドを呼び出し、その後、現在のすべての項目を削除すると:

if(!this.items){ 
    this.initItems(); 
} 

これは、すべての罰金ここまでです。フォームの初期荷重は完全に機能します。 ウィンドウを非表示にして再び開くと、項目のクリア/リロードはコンポーネント上で完全に機能しますが、以前のchildNodes/itemsはdom.childrenおよびdom.innerHTMLにまだ存在します。

このように私のformPanelは今、実際の値との一番下にある任意の値、および新たにロードされたコントロールを持っていないコントロールの2つの以上のセットを表示します。

私はアイテムの追加/クリア後formPanel.doLayoutを()を呼び出します。

formPanelにあるすべてのアイテムでformPanel.removeメソッドを呼び出そうとしましたが、重複して表示されてしまい、レイアウトが正常にドッキング/アンカーできないように見えます。各項目の下にある水平スクロールバー。

は、私が実際にクリア/ dom.childrenとdom.innerHTMLをリロードする他に何ができますか?

ご協力いただければ幸いです。

違いがあれば、私はExtJS 2.1を使用しています。それぞれの子コンテナは、それ自身のアップデータを持っている場合

答えて

1

、あなたは、パネルのアップデータを入手、それをトリガーし、同様にそのトリガーすべてのそれの子供のアップデータを持つことができるはずです。この方法では、コンポーネントを繰り返し削除/追加するのではなく、リフレッシュします。

あなたは本当に何をしようとしていますか? FormPanelのフォームフィールドに保持されているデータをリロードするだけですか?

+0

こんにちはSteve。 これはコントロールのリフレッシュではありません。私はそれを閉じたときに処分されないformpanelとウィンドウを持って、それは隠されるだけ。しかし、私がそれを再び開くと、formpanel上のすべての項目をクリアし、別のコントロールを追加したいと思います。これはreadOnlyとeditableモードのようなものですが、readOnlyモードとEditableモードで使用されるコントロールは、完全に異なるタイプのコントロールです。唯一変化している項目があれば、独自のフォームパネルで2つのウィンドウを宣言したくありませんでした。 formpanelへの変更がdomにプッシュされないので、重複が発生します。 – Jabezz

+0

Jabezzは非常に速いストロークで、ウィンドウを隠す代わりにウィンドウを閉じるようにしましたか?窓を閉じると子供とともにそれが破壊されます。いずれにせよ、あなたのソースコードから抽出されたものがここに便利です。 – mxgrn

0

これは、意図的にformpanelを破壊したくないということですか?ウィンドウにフォームパネル以外のものが含まれていますか?

ウィンドウにフォームパネルのみが含まれているか、formpanelが最大のパーツとして含まれている場合は、ウィンドウを閉じるときにウィンドウを破棄し、必要なときにいつでも再作成することをお勧めします。この場合

あなたは(だけ/書き込み可能なレディ)対象となるコントロールの種類を言うためにウィンドウを作成する関数にパラメータを渡すことができます。

関連する問題