2011-09-20 16 views
7

Tôi đang có combobox với trong window-> form-> combo, iam ràng buộc dữ liệu từ lưới đến combo bằng form.loadRecord (record).Extjs 4 Combo hộp không tải cho lần đầu tiên (sau khi kết hợp được thiết lập với dữ liệu biểu mẫu)

Vấn đề của tôi là:

Sau ràng buộc dữ liệu, tôi kích hoạt các combo để thay đổi dữ liệu kết hợp, Đây là lần đầu tiên kết hợp mở rộng chút và ẩn tự động sau khi nhấp chuột thứ hai chỉ mục kết hợp tải một cách chính xác.

{ 
    xtype: 'combobox', 
    editable: false, 
    id: 'USERTYPECmbo', 
    queryMode: 'remote', 
    displayField: 'USERTYPE', 
    store: Ext.create('Ext.data.Store', { 
     autoLoad: true, 
     fields: ['USERTYPE'], 
     proxy: { 
      type: 'ajax', 
      extraParams: { 
       typeName: 'USERTYPE' 
      }, 
      url: 'USERTYPE.htm', 
      reader: { 
       type: 'json', 
       root: 'res' 
      } 
     }, 
     listeners: { 
      load: function (store, options) { 
       var combo = Ext.getCmp('USERTYPECmbo'); 
       combo.setValue(combo.getValue()); //Set the remote combo after the store loads. 
      } 
     } 
    }), 
    name: 'USERTYPE', 
    fieldLabel: 'USER TYPE' 
} 

chỉ cho tôi nơi iam sai hoặc bất kỳ thuộc tính nào cần được thêm vào thành phần.

Trả lời

4

Đó là vì giá trịLoại không được xác định trong đối tượng cấu hình của bạn (trong khi displayField được đặt). Khi extjs cố gắng tải combo của bạn, anh ta cần cả hai trường giá trị và hiển thị để hiển thị combo của bạn một cách chính xác nhưng trong thời gian render, valueField của bạn chưa được thiết lập và chờ đợi yêu cầu ajax được gửi đến máy chủ và phản hồi được gửi lại.

Trong trình lắng nghe của bạn, bạn đang đặt giá trị kết hợp trong khi chưa được hiển thị. Khi bạn nhấp vào combo của bạn lần thứ hai, chính xác sau khi tải từ xa JSON thì trường kết hợp được đặt.

{ 
    xtype : 'combobox', 
    editable : false, 
    id:'USERTYPECmbo', 
    queryMode: 'remote', 
    displayField: 'USERTYPE', 
    valueField: 'USERTYPE',//set whatever field you like in your json       
    store :new Ext.data.Store({ 
     autoLoad: true, 
     fields: [ 'USERTYPE' ], 
     proxy: { 
      type: 'ajax', 
      extraParams: {typeName : 'USERTYPE'}, 
      url : 'USERTYPE.htm', 
      reader: { 
       type: 'json', 
       root : 'res' 
      } 
     }      
    }), 
    name : 'USERTYPE', 
    fieldLabel: 'USER TYPE' 
} 

Cập nhật: Một vấn đề tôi đã không nhận thấy là bạn đã tạo các cửa hàng sử dụng Ext.create và vì lý do đó, ExtJS sẽ cố gắng để Nhận JSON của bạn hai lần (chỉ cần kiểm tra nó bằng cách sử firebug) trong khi Một yêu cầu sẽ là đủ. Chỉ cần sử dụng mới thay vì Ext.create.I đã kiểm tra mã của bạn trong máy chủ cục bộ của tôi và hoạt động của nó chính xác. Nếu bạn vẫn gặp sự cố tương tự, vui lòng cung cấp liên kết tải xuống biểu mẫu của bạn js + html + Store để tôi có thể xem lại mã ur.You có thể tải xuống các tệp thử nghiệm của tôi được xây dựng trên mã của bạn và hoạt động từ here .tested trên FF 6 và opera 10 và IE9

+0

hi drfanai, cảm ơn vì bạn trả lời, tôi đã thêm valueField và cũng nói thêm chậm trễ công việc như .. var nhiệm vụ = new Ext.util.DelayedTask (function() {view.down ('form'). loadRecord (bản ghi);}); task.delay (20000); ..để kết thúc biểu mẫu hiển thị và lưu trữ tải .. mặc dù iam nhận được cùng một vấn đề – vineth

+0

@ drfanai Nếu có thể cung cấp mẫu kết hợp mẫu kết hợp (từ xa) mẫu dữ liệu hoặc bất kỳ liên kết có liên quan. Tôi không biết làm thế nào có thể xác minh TẤT CẢ cửa hàng kết hợp được tải bên trong các hình thức – vineth

+0

Cập nhật câu trả lời của tôi.hope nó giúp.check url này cho một hướng dẫn tốt trên các cửa hàng từ xa http://www.quizzpot.com/2009/10/combo-box-loaded-dynamically-and- từ xa/ –

6

Hãy thử thêm

queryMode: 'local' 

để tính combobox của bạn

+0

giải pháp tốt nhất !!! – Stevanicus

Các vấn đề liên quan