3

私は次のことを行う方法について少し確信が持てません:

グリッド パネルがあり、フィールドの 1 つでオートコンプリートがあり、アプリケーションのこの部分は正常に動作しています。

グリッドパネルのオートコンプリート

私がやりたいことは次のとおりです。オートコンプリート リストからアイテムを選択すると、そのアイテムに関連付けられた「説明」データを入力し、適切なセルに入力します。

たとえば、「PartNum 3」に対して返されるデータは次のとおりです。

{"PartNum":"PartNum 3","Description":"Description partnum 3"}

選択すると、グリッド パネルの [説明] セルで [説明 partnum 3] が更新されます。

今、私が少し混乱しているのは、これを行う最善の方法は何かということです。ここで説明されているように、最初の方法は「DOM」モデルのようです。 ExtJS グリッドで特定のセルの値を読み取って設定する方法は? . もう1つの方法は、ExtJs ComboBoxのストアの更新またはリロードなど、「ストア」ソリューションのようです。

だから私の質問は、どの方法を使用する必要があり、その理由は何ですか? 特に、バックエンドで追加操作を実行するときの最善の方法を知りたいです。

Gridpanel とオートコンプリートに適用される "Store" メソッドのコードも大歓迎です。

現在のコードに関する限り、ここに私のモデルがあります:

Ext.define('CustomerOrderLineGrid.model.COLInventoryPart', {
extend: 'Ext.data.Model'
, fields: ['Id', 'PartNum', 'Description']
, proxy: {
    type: 'ajax'
    , api: {
        read: '../InventoryPart/InventoryPartListAutoComplete'
          }
    //        , url: 'someUrl'
    , extraParams:
    {
        total: 50000
    }
    , reader: {
        type: 'json'
        , root: 'InventoryParts'
        , successProperty: 'success'
        , totalProperty: 'total'
    }
    , simpleSortMode: true
}

});

店舗は:

Ext.define('CustomerOrderLineGrid.store.COLInventoryParts', {
extend: 'Ext.data.Store',
model: 'CustomerOrderLineGrid.model.COLInventoryPart',
autoLoad: false
, pageSize: 200
, remoteSort: true
, remoteFilter: true
, buffered: true
, sorters: [{
    property: 'PartNum'
    , direction: 'ASC'
}]

});

ビューの一部は次のとおりです。

, editor: {
                xtype: 'combo'
                , store: 'COLInventoryParts'
                , displayField: 'PartNum'
                , typeAhead: true
                , width: 320
                , hideTrigger: true
                , minChars: 2
                , listeners:
                {
                    select: function (f, r, i) {
                       // CODE TO INSERT TO POPULATE DESCRIPTION FIELD
                    }
                }
            }
4

1 に答える 1

1

あなたが提供したリンクはを使用していることに注意してください

グリッドで編集イベントをリッスンし、編集が autoComplete 列にあった場合は、説明列に値を設定するのが最善の方法だと思います。次のようになります。

... あなたのグリッドの定義 ...

listeners: {
    edit: function(editor, e) {
              if(e.field === 'PartNum') {
                  //NOTE: You need a reference to the autocomplete store for this to work
                  var rec = store.findRecord('PartNum', e.value);
                  e.record.set('Description', rec.get('Description'));
              }
          }
}

... 残りのコード ...

これは、オートコンプリートが使用しているストアへの参照を取得できることを前提としています。現在それを持っていなくても、それはかなり簡単なはずです。

これで始められるはずです。

于 2011-11-21T15:07:38.537 に答える