2012-02-22 23 views
8

Tôi có 3 hộp kết hợp. Khi bạn nhấp vào hộp đầu tiên, hộp thứ hai cần cập nhật hiển thị dữ liệu có liên quan. Tôi chọn combo đầu tiên hộp thứ hai cập nhật hoàn hảo. Tuy nhiên, nếu tôi cố gắng các bước tương tự một lần nữa hộp thứ hai không dừng tải (xem hình)kết hợp extjs sẽ không dừng tải 4.07

enter image description here

Đây là mã từ quan điểm của tôi

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

và từ điều khiển của tôi

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

Trả lời

3

tôi thấy rằng hooking vào 'mở rộng' sự kiện trên kết hợp làm việc tốt hơn (hooking vào 'tải' trên các cửa hàng bằng cách nào đó phá hủy các ràng buộc của các combo đến cửa hàng, gây ra tất cả các loại khủng khiếp, khó theo dõi lỗi).

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

Điều này đã thực hiện công việc cho tôi mà không vi phạm đơn đăng ký của tôi.

4

Tôi có cùng một triệu chứng với kho dữ liệu cục bộ với ExtJS Combobox, nhưng sửa lỗi chính xác là đặt queryMode đúng trong hộp tổ hợp - không có lỗi trong cửa hàng (ít nhất là trong phiên bản 4.1 của ExtJS). queryMode phải được đặt thành "local" thay vì giá trị "từ xa" mặc định của nó, nếu dữ liệu của bạn được lưu trữ cục bộ trong kho lưu trữ dữ liệu (như trong ví dụ làm việc của tôi bên dưới).

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

Một giải pháp thực sự đơn giản là thêm listConfig config để combo box của bạn:

{ 
    xtype:'combobox', 
    fieldLabel: 'My Combo', 
    listConfig: { loadingText: null, loadMask: false }, 
} 
Các vấn đề liên quan