4

私はフォーム パネルを作成しました。応答ハンドラーを介して入力されるストアを使用して、パネル内にいくつかのコンボ ボックスをレンダリングしています。パネルを再度レンダリングしたい場合の問題は、パネルを再構築しているにもかかわらず、ストアなしでコンボボックスをレンダリングすることです。私は原因を突き止めるためにデバッグしようとしましたが、驚くべきことに、コンボボックスの場合、ストアは呼び出し時にnullです-comboBox.setStore(store)プロパティ(isRendered)をチェックし、それがtrueであることを確認したため、ストアを追加しませんただし、まだnullである既存のストアを保持してください。

コンボボックスを含む折りたたみ可能なフィールドセットを作成した別のシナリオでこの問題を見てきました。フィールドセットを最小化および最大化すると、同じ理由でストアが消えます。

誰かがここで私を助けてくれませんか、私はここで完全に打たれました。さまざまなオプションを試しましたが、何も機能しません。

4

4 に答える 4

2

コメントありがとうございます。実際にプラグインアプローチを試しましたが、コンポーネントの公開された要素ではないストアへのハンドルを取得する方法について完全に理解できませんでした。

とにかく私は何か他のものを試しましたが、デバッグ中に、[表示]ボタンをクリックしてコンポーネントを再度作成しているのに、渡されたIDは同じであることがわかりました(これは望ましいです)が、特定のIDに対して、以前の参照がすでに存在していることがわかりました。 Ext.Components。

したがって、簡単な解決策は次のとおりです。Component comp = Ext.getCmp(id); if(comp!= null)comp.destroy();

これは実際には、ComboBoxの(isRendered()プロパティがtrueを返す原因となった参照として機能していましたが、使用できなくなったため、ストアを正しく表示できます。

これが同様の問題に直面している他の人に役立つことを願っています。とにかく返信してくれてありがとう。

于 2008-09-20T18:22:58.970 に答える
0

あなたは書く必要があります:

field = new ComboBox({plugins: view_plugin});

あなたの場合、view_pliginの私のコードを前のどこかで定義してください。または、インラインで組み込むこともできます。

field = new ComboBox({plugins: { code of plugin });

プラグイン内では、すべてのプライベートプロパティとメソッドにアクセス/変更できます。

field.setNewStore(store)後でいつでもを使用してストアを変更することもできます。

于 2008-09-18T16:19:57.200 に答える
0

ComboBox.view.setStore() が役立ちます。

ビューがプライベート変数の場合は、作成時に Combobox 構成パラメーター間で言及するようにしてください。役に立たない場合は、次のようなプラグインを使用できます。

view_plugin = {

     init: function(o) {

          o.setNewStore = function(newStore) {
              this.view.setStore(newStore);
          };
     }
};

の行を追加します

plugins: view_plugin,

コンボボックスの設定へ。

次に、コードの後半で、combobox.setNewStore(newStore) を呼び出すことができます。

于 2008-09-18T10:52:57.033 に答える
0

doLayout()の方法を試しましたFormPanelか?

于 2008-09-18T10:02:04.083 に答える