2012-02-22 12 views
8

Mam 3 pola kombi. Po kliknięciu pierwszego pola drugie pole musi zostać zaktualizowane, pokazując odpowiednie dane. Wybieram pierwsze combo, które doskonale aktualizuje drugie opakowanie. Jednakże jeśli próbuję te same czynności, ponownie druga skrzynka nie zatrzymuje ładowanie (patrz zdjęcie)extjs combo nie przestanie ładować 4.07

enter image description here

Oto kod z moim zdaniem

{ 
    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' 
} 

iz mojego kontrolera

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 
    });  
}, 

Odpowiedz

3

stwierdziliśmy, że spinanie do „rozszerzenia” zdarzenia na combo działało lepiej (spinanie do „obciążenie” w sklepie jakoś zniszczone wiązanie kombi do sklepu, powodując różnego rodzaju okropne, trudne do wykrycia błędy).

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

Zrobiłem to za mnie bez przerywania aplikacji.

4

Miałem ten sam symptom z lokalnym magazynem danych z ExtJS Combobox, ale poprawną poprawką było prawidłowe ustawienie queryMode w polu kombi - w sklepie nie ma błędu (przynajmniej w 4.1 wersji ExtJS). queryMode musi mieć wartość "local" zamiast domyślnej wartości "remote", jeśli dane są przechowywane lokalnie w składnicy danych (jak w poniższym przykładzie roboczym).

ComboBox:

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

Store:

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

Naprawdę Prostym rozwiązaniem jest dodanie listConfig config do pola kombi:

{ 
    xtype:'combobox', 
    fieldLabel: 'My Combo', 
    listConfig: { loadingText: null, loadMask: false }, 
}