2012-01-16 30 views
5

Tôi có một hộp kết hợp hiển thị số lượng mặt hàng. Dựa trên lựa chọn số lượng mặt hàng tôi đang hiển thị giá trị giá của mặt hàng đó. Theo mặc định, tôi đang đặt giá trị giá thành giá trị mục đầu tiên. Tuy nhiên khi tôi tải trang, tôi muốn combo box của tôi để hiển thị qty mục đầu tiên tức là 100.giá trị chọn trước từ menu thả xuống (Hộp tổ hợp) trong extjs?

enter image description here

Vấn đề: cần tải Số lượng: 100 thay vì nạp trống

Vì vậy, tôi có một cửa hàng được xác định như

Store = new Ext.data.JsonStore({ 
     storeId: 'Store', 
     root: 'storevalue', 
     autoLoad: false, 
     baseParams: { itemid: '${itemID!""}', 
         adjustPrice: '${adjustPrice}', 
         overrideShowPrice: '${overrideShowPrice}' }, 
     url: 'ListQtyPrice.epm', 
     fields: [ 'qty', 'rawprice', 'displayPrice' ] 
    }); 

Combo hộp để hiển thị Số lượng

<#if Select> 
     new DBEComboBox({ 
      name: 'orderqty', 
      displayField: 'qty', 
      valueField: 'qty', 
      id: 'order-qty', 
      store: Store, 
      forceSelection: true, 
      mode: 'remote', 
      triggerAction: 'all', 
      allowBlank: true, 
      listWidth: 202, 
      triggerClass: 'orderqty-trigger', 
      width: 200 
      ,defaultValue: 100 
      ,listeners: { 
       // for price adjustments 
      } 
     }); 
     </#if> 


Store.load({ 
      callback: function() { 
      alert("reached"); 
      Ext.getCmp('order-qty').setValue(Store.getAt(0).get('qty')); 
      var oqc = Ext.getCmp('order-qty'); 
      var value = Ext.getCmp('order-qty').getValue(); 
      alert(" hey :" +value); 
      } 
     }); 

Có thể xem hey: 100 trong báo cáo cảnh báo

Trả lời

7

Tôi đã gặp sự cố này vài lần. Cách duy nhất tôi đã thực sự nhận được điều này đã được giải quyết là để gọi setValue trên combobox sau khi cửa hàng đã được tải, bạn chỉ có thể thêm một người nghe trên cửa hàng, nhưng điều đó luôn luôn có vẻ hơi lộn xộn với tôi. Tôi thường có một sự kiện nghe độc ​​lập như thế này:

Store.on('load',function(store) { 
    Ext.getCmp('order-qty').setValue(store.getAt('0').get('qty')); 
}); 

EDIT: ngày 18 tháng 1 2012

OK như đã đề cập ở đây là một ví dụ làm việc hoàn chỉnh các ComboBox với một giá trị mặc định được thiết lập. Điều này được thực hiện bằng cách sử dụng ExtJS 4.02, nên làm việc tốt với 4.07 mặc dù, không chắc chắn về 4.1.

Hãy chắc chắn rằng bạn đặt con đường ExtJS đúng của bạn trong các liên kết (xem khung ở phía trên cùng của html), nếu không chỉ cần đặt cả combo ví dụ và data.json ở cấp cùng một thư mục và họ nên chạy tốt:

data.json:

[ 
    {"value":1,"name":"Option 1"}, 
    {"value":2,"name":"Option 2"}, 
    {"value":3,"name":"Option 3"} 
] 

combo-example.html:

<html> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">  
     <title>Combo Box Example</title> 
    <link rel="stylesheet" type="text/css" href="[your extjs path]/resources/css/ext-all.css"> 

    <script type="text/javascript" src="[your extjs path]/ext-all.js"></script> 
    <script type="text/javascript" > 

    Ext.onReady(function() { 

     // the datastore 
     var myStore = new Ext.data.Store({ 
      fields: ['value', 'name'], 
      proxy: { 
       type: 'ajax', 
       url : 'data.json', 
       reader: { 
        type: 'json' 
       } 
      }, 
      autoLoad: true 
     }); 

     // a window to hold the combobox inside of a form 
     myWindow = Ext.create('Ext.Window', { 
      title: 'A Simple Window', 
      width: 300, 
      constrain: true, 
      modal: true, 
      layout: 'fit', 
      items: [{ 
       // the form to hold the combobox 
       xtype: 'form', 
       border: false, 
       fieldDefaults: { 
        labelWidth: 75 
       }, 
       bodyPadding: '15 10 10 10', 
       items: [{ 
        // the combobox 
        xtype: 'combo', 
        id: 'myCombo', 
        fieldLabel: 'A Label', 
        valueField: 'value', 
        displayField: 'name', 
        store: myStore, 
        //queryMode: 'local', 
        typeAhead: true, 
        forceSelection: true, 
        allowBlank: false, 
        anchor: '100%' 
       },{ 
        // shows the selected value when pressed 
        xtype: 'button', 
        margin: '10 0 0 100', 
        text: 'OK', 
        handler: function() { 
         alert('Name: ' + Ext.getCmp('myCombo').getRawValue() + 
           '\nValue: ' + Ext.getCmp('myCombo').value); 
        } 
       }] 
      }] 
     }); 
     // show the window 
     myWindow.show(); 

     // function to give the combobox a default value 
     myStore.on('load',function(store) { 
      Ext.getCmp('myCombo').setValue(store.getAt('0').get('value')); 
     }); 

    }); 

    </script> 

    </head> 
    <body> 
    </body> 
</html> 
+0

tôi sẽ gửi một giải pháp dọc theo dòng giống nhau (1). Mad-D, bạn phải đảm bảo đoạn mã của Geronimo TRƯỚC KHI bất kỳ cuộc gọi tải nào đến cửa hàng. Nếu nó vẫn không hoạt động, bất kỳ lỗi nào trong firebug? Bạn có thể xác minh rằng các cửa hàng, một lần nạp, thực sự có hồ sơ? –

+0

Điều này luôn hoạt động tốt cho tôi ... Đây có phải là cho ExtJS ** 4 ** không? Cửa hàng và combobox của bạn vẫn được cấu hình giống như trên? Bạn đã đặt ví dụ trên bên ngoài của tất cả các chức năng khác nhưng bên trong Ext.onReady? Nếu bạn muốn đơn giản về nó (nhưng không năng động chút nào), bạn luôn có thể thêm cấu hình 'value' vào combobox ví dụ:' value: '100'' hoặc 'value: 100' – Geronimo

+0

tôi đã thử những thứ này 1 . 'store.getAt (' 0 '). get (' qty '))' trong cảnh báo và nhận giá trị như dự kiến ​​tức là 100 nhưng nó không đặt defaultvalue. 2. khi tôi đã thử giá trị: '100' và giá trị: 100, nó không hiển thị giá trị mặc định là 100. –

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