0

フォームのコンボボックスに問題があります。form.loadRecord問題は、フォームデータを(を使用して)ロードすると、モデルにデータがあることがわかっていても、コンボボックスが空になることがあることです。

Firebugを調べると、レコードがロードされた後にコンボボックスストアがロードされていることがわかります。これが理由だと思います。コンボボックスストアは後でロードされ、次にレコードがロードされます。

これが私がコンボボックスストアを設定する方法です:

    //All stores have autoload:true configuration.
    var possessionGroundsStore = Ext.create('path.to.store');
    var vehicleTypesStore = Ext.create('path.to.store');
    var usePurposesStore = Ext.create('path.to.store');
    this.editView = Ext.create('path.to.view');
    this.editView.getPossessionGroundsField().store = possessionGroundsStore;
    this.editView.getVehicleTypeIdComboBox().store = vehicleTypesStore;
    this.editView.getUsePurposeField().store = usePurposesStore;

    //later
    this.editView.loadRecord(record);

この問題を解決する一般的な方法はありますか?

私が今見ることができる唯一の方法はstore.load、すべてのコンボボックスストアでコールバックを使用し、すべてのストアがロードされた後にloadRecordを実行することですが、それは複雑に思えます。

何か助けはありますか?

更新:form.loadRecord呼び出されると、内部的に。が呼び出されますfield.setValue()。つまり、要点は、コンボボックスストアを呼び出す前にデータを入力する必要setValueがあるということです。ストアがロードされていない場合は、のvalueField代わりにが表示されますdisplayField

4

1 に答える 1

5

コンボボックスのデフォルト構成は、作成後に初めて展開されたときにストアのロードをトリガーします。

構成を指定しない限り、これはどのコンボボックスでも発生しますqueryMode: 'local'。つまり、デフォルトのコンボボックス構成は、ほとんどの場合、コンポーネントが作成された後にそのストアのロードを完了します。そのため、コンボのロードが遅すぎて苦労しているのは奇妙に思えます。autoLoad: true

ただし、通常はアプリの初期化段階でコンボボックスをセットアップし、queryMode: 'local'それらのストアをプリロードするため、同じ問題には遭遇しません。これを行うのは、通常、コンボ ストアはすべて、アプリのさまざまなビューで使用できるすべての参照ストアであるからです。コンボ コンポーネントを作成するときにストアを再作成するのではなく、既存の読み込まれた参照ストアへの参照をExt.getStore('ComboStoreId'). そのようにアプリを設定してみてください。

それをしたくない場合はautoLoad: true、コンボストアから構成を削除してから、 を呼び出しyourComboStore.load() た後に呼び出すこともできますloadRecord

于 2012-08-28T15:45:10.527 に答える