0

アプリケーションの開発にextjs 4.1.1aを使用しています。

2 つのコンボ ボックスと項目セレクターで構成されるフォームがありました。

最初のコンボボックスで選択された値に基づいて、itemselector はデータベースからデータを読み込みます。これはうまくいっています。

私の問題は、最初のコンボボックスを再選択すると、新しいデータが itemselector に表示される以前のデータと共に itemseletor に表示されることです。

例: 名前「test1」は、ID 801、2088、5000 で構成されます。firstcombobox itemselector で test1 を選択すると、以下のような出力が表示される必要があります。

「test2」が id 6090,5040 で構成されている場合。firstcombobox itemselector で test2 を選択すると、次のような出力が表示される必要があります。

問題は。初めて firstcombobox から「test1」を選択すると、期待どおりに出力されます。firstcombobox から「test2」を再選択すると、出力は次のようになります。

ご覧のとおり、以前に表示されたデータ (赤い四角形でマーク) はそのまま残り、新しいデータ (緑の四角形でマーク) が表示されます。最初のコンボボックスを再選択するたびに、以前に itemselector に表示されていたデータを itemselector に新しいデータを出力する前に消去したいと考えています。最初のコンボボックスを再選択するたびに itemselector をリセットするにはどうすればよいですか?

4

7 に答える 7

1

上記の解決策はすべて私の問題を解決します。Sencha Forum から解決策を見つけました。 https://www.sencha.com/forum/showthread.php?142276-closed-Ext-JS-4.0.2a-itemselector-not-reloading-the-store

itemselector.js ファイルで、以下の行を変更します。

populateFromStore: function(store) {
    var fromStore = this.fromField.store;

    // Flag set when the fromStore has been loaded
    this.fromStorePopulated = true;

    // THIS LINE BELOW MUST BE CHANGED!!!!!!!!!!!!
    fromStore.loadData(store.getRange()); //fromStore.add(store.getRange()); 

    // setValue waits for the from Store to be loaded
    fromStore.fireEvent('load', fromStore);
},
于 2015-07-22T13:30:12.173 に答える
1

storeコマンドでからすべてitemselectorのアイテムを削除する必要がありremoveAllます。その後、 の を実行する必要loadstoreありitemselectorます。

itemselector.store.removeAll();
itemselector.store.load();
于 2013-08-30T13:46:04.550 に答える
0

あなたはそれを手に入れましたか?アイテムセレクターのコンボボックスの最初のストーを選択すると、ストアのロード後にurがパラメーターを通過した後にnullになります

例えば

store.load(null)store.proxey.url='jso.php?id='+combobox.getrawvalue(), store.load();

そのように、urコンボボックスで値を選択するときにその時間urがリスナーを使用してそのlistnersでurコンボボックスを使用した場合、上記のコードで使用したurコンボボックスでいくつかの値を選択すると、urがjson.phpにいくつかの値を渡した後にタイムファーストストアがnullになります次に、古いデータが削除され、新しいデータがそのストアにロードされるように、応答を使用してロードを保存します

あなたがあなたのコードを投稿するなら、私は正しいコードを与えるでしょう

于 2013-03-18T14:20:52.323 に答える
0

挿入する必要があります...

this.reset();

データを挿入している関数の先頭にあります。

例として...

Ext.override( Ext.ux.ItemSelector, {
    setValue: function(val) {
        this.reset();
        if (!val) return;
        val = val instanceof Array ? val : val.split(this.delimiter);
        var rec, i, id;
        for (i = 0; i < val.length; i++) {
            var vf = this.fromMultiselect.valueField;
            id = val[i];
            idx = this.toMultiselect.view.store.findBy(function(record){
                return record.data[vf] == id;
            });
            if (idx != -1) continue;            
            idx = this.fromMultiselect.view.store.findBy(function(record){
                return record.data[vf] == id;
            });
            rec = this.fromMultiselect.view.store.getAt(idx);
            if (rec) {
                this.toMultiselect.view.store.add(rec);
                this.fromMultiselect.view.store.remove(rec);
            }
        }
    }
});
于 2012-12-20T07:59:58.883 に答える
0

ExtJS 4.2.1 でも同じ問題に遭遇しました。reload()データ ストアを呼び出してから、データ ストアのコールバックsetValue()のアイテム セレクターに空の文字列を指定して動作させました。reload()

Ext.create("Ext.form.field.ComboBox", {
    // Other properties removed for brevity
    listeners: {
        change: function(field, newValue, oldValue, eOpts) {
            Ext.getStore("ExampleStore").reload({
                callback: function() {
                    Ext.getCmp("ExampleItemSelector").setValue("");
                }
            });
        }
    }
});

Ext.create("Ext.data.Store", {
    storeId: "ExampleStore",
    // Other properties removed for brevity
});

Ext.create("Ext.form.FormPanel", {
    // Other properties removed for brevity
    items:[{
        xtype: "itemselector",
        id: "ExampleItemSelector",
        // Other properties removed for brevity
    }]
});

populateFromStore()興味のある方のために説明すると、アイテム セレクターの機能にバグがあると確信しています。関数が呼び出されると、バウンド ストア ( store) のすべての値が内部ストア ( fromStore) に盲目的に追加されます。fromStore.removeAll()への呼び出しの前に への呼び出しがあるはずfromStore.add()です。ItemSelector.js の関連コードを次に示します。

populateFromStore: function(store) {
    var fromStore = this.fromField.store;

    // Flag set when the fromStore has been loaded
    this.fromStorePopulated = true;

    fromStore.add(store.getRange());

    // setValue waits for the from Store to be loaded
    fromStore.fireEvent('load', fromStore);
},

編集 12/18/2013

アイテム セレクター (例: change) でコールバック イベントを構成した場合、 を呼び出すときにイベントを一時的に無効にすることができますsetValue("")。例えば:

var selector = Ext.getCmp("ExampleItemSelector");
selector.suspendEvents();
selector.setValue("");
selector.resumeEvents();
于 2013-12-17T22:18:20.957 に答える