5

JsonStore と queryMode: 'remote' を含む ExtJS 4.1 コンボ ボックスがあり、ページングとフィルタリングが次のように行われます。

...
queryMode: 'リモート',
allowBlank: 真、
forceSelection: 真、
自動選択: false,
ページサイズ: 25,
typeAhead: 真、
minChars: 2,
...

このコンボ ボックスに保存された値を含むフォームを読み込むときは、保存された値をクエリ (フィルタリング) パラメーターとして渡してストアを読み込み、選択した値が確実に返されたレコード内にあることを確認してから、その値を設定します。コンボとして選択された値として:

    mycombo.getStore().load({
        パラメータ: {
            クエリ: 表示フィールド
        }、
        スコープ: {
            フィールド:コンボ、
            値フィールド: 値フィールド,
            表示フィールド: 表示フィールド
        }、
        コールバック: 関数 (レコード、操作、成功) {
            this.field.setValue(this.valueField);
        }
    });

これまでのところ、上記はうまく機能しています。問題は、ユーザーがドロップダウン矢印をクリックしてコンボの別の値を選択すると、ストアの最初のページが読み込まれ、以前に選択されたすべての値が消去され、何も選択されていない場合でも、以前に選択された値が失われることです。 .

この問題は一般的なもので、次の質問とよく似ています: リモート JSON ストアを使用した ExtJS ページ付きコンボ。選択した値をページング で表示し、次のように要約できます。

リモート ストアとページングを使用する ExtJS コンボ ボックスで、読み込まれたページが変更されると、選択した値が失われます。

ストアの設定を試みclearOnPageLoad: falseましたが、新しいページが読み込まれるたびに、リストの最後にレコードが追加されます。このパラメーターがロードされたページをキャッシュし、前後に移動している間も正しいページを表示することを期待していました。

ページ間を移動している間、選択した値を保持する方法についてのアイデアはありますか? 選択した値で手動でレコードを作成し、新しい値が選択されるまでページの読み込みごとにそれをストアに追加することもできると思いますが、これは非常に基本的なことには手間がかかりすぎるように思えます。

4

3 に答える 3

8

有料ライセンスを持っているため、Sencha サポートに連絡することになりました。これが返された答えです。


Ext.override(Ext.form.field.ComboBox, {
    onLoad: function() {
        var me = this,
            value = me.value;

        if (me.ignoreSelection > 0) {
            --me.ignoreSelection;
        }

        if (me.rawQuery) {
            me.rawQuery = false;
            me.syncSelection();
            if (me.picker && !me.picker.getSelectionModel().hasSelection()) {
                me.doAutoSelect();
            }
        }

        else {

            if (me.value || me.value === 0) {
                if (me.pageSize === 0) { // added for paging; do not execute on page change
                    me.setValue(me.value);
                }
            } else {


                if (me.store.getCount()) {
                    me.doAutoSelect();
                } else {

                    me.setValue(me.value);
                }
            }
        }
    }
});
于 2013-02-01T09:40:11.517 に答える