2012-02-22 17 views
8

私は3つのコンボボックスを持っています。最初のボックスをクリックすると、2番目のボックスが更新され、関連するデータが表示されます。 2番目のボックスが完全に更新される最初のコンボを選択します。私はextjsコンボは読み込みを停止しません4.07

enter image description here

(画像を参照)は、第2のボックスはロードを停止しません。もう一度同じ手順をしようとした場合しかし、ここで私の見解

{ 
    xtype: 'combobox', 
    name: 'Clients', 
    id: 'clients', 
    displayField: 'Name', 
    store: 'Clients', 
    queryMode: 'local', 
    mode: 'local', 
    valueField: 'Id', 
    fieldLabel: 'Clients' 
},{ 
    xtype: 'combobox', 
    name: 'Projects', 
    id: 'projects', 
    displayField: 'Name', 
    editable: false, 
    store: 'Projects', 
    queryMode: 'local', 
    mode: 'local', 
    valueField: 'Id', 
    fieldLabel: 'Projects' 
} 

と私のコントローラから

からのコードがあります
stores: ['Projects', 'Clients', 'Jobs'], 

init: function() { 
    this.control({ 
     '#clients': { 
      change: this.onClientSelect 
     }, 
     'processlist button[action=copy]': { 
      click: this.onCopyPart 
     }, 
     '#processColourContainer #processColourGrid': { 
      edit: this.onPurchaseOrderColourUpdate 
     } 
    }); 
}, 

onLaunch: function() {    
    var clients = this.getClientsStore(); 
    clients.load();    
}, 
onClientSelect: function (selModel, selection) { 

    var projects = this.getProjectsStore(); 
    projects.load({ 
     url: '/Projects/Read/?clientId=' + selection, 
     scope: this 
    });  
}, 

答えて

3

は私がコンボで「拡大」イベントをフックするストアの「ロード」をフック(良く働いていたことがわかったが何とかコンボの結合を破壊しましたすべての種類の恐ろしい、エラーを追跡するのが難しい)原因になります。

combo.on('expand', function (field, options) { 
    if (Ext.typeOf(field.getPicker().loadMask) !== "boolean") { 
     field.getPicker().loadMask.hide(); 
    } 
}, this); 

これは私のアプリケーションを壊さずに私の仕事でした。

4

ExtJS Comboboxのローカルデータストアでも同じ症状がありましたが、適切な解決策はコンボボックスにqueryModeを正しく設定することでした。ストア内にバグはありません(少なくとも4.1バージョンのExtJS)。データがデータストア内にローカルに保存されている場合は、デフォルトの「リモート」値ではなく、queryModeを「local」に設定する必要があります(下の実例を参照)。

コンボボックス:

xtype: 'combobox', 
name: 'sizeMaxUnits', 
value: 'TB', 
editable: false, 
displayField: 'abbr', 
**queryMode: 'local',** 
store: 'UnitsStore', 
valueField: 'units' 

ストア:

Ext.define('DiskApp.store.UnitsStore', { 
extend: 'Ext.data.Store', 

requires: [ 
    'DiskApp.model.UnitsModel' 
], 

constructor: function(cfg) { 
    var me = this; 
    cfg = cfg || {}; 
    me.callParent([Ext.apply({ 
     autoLoad: false, 
     model: 'DiskApp.model.UnitsModel', 
     storeId: 'MyStore', 
     data: [ 
      { 
       abbr: 'MB', 
       units: 'M' 
      }, 
      { 
       abbr: 'GB', 
       units: 'G' 
      }, 
      { 
       abbr: 'TB', 
       units: 'T' 
      } 
     ] 
    }, cfg)]); 
} 

})。

2

本当に簡単な解決策は、あなたのコンボボックスにlistConfig設定を追加することです:

{ 
    xtype:'combobox', 
    fieldLabel: 'My Combo', 
    listConfig: { loadingText: null, loadMask: false }, 
} 
関連する問題