2012-01-16 3 views
5

У меня есть поле со списком, в котором отображается количество элементов. Основываясь на выборе количества элементов, я показываю стоимость товара. По умолчанию я устанавливаю значение цены в значение первого элемента. Однако, когда я загрузить страницу, я хочу, чтобы мой выпадающие для отображения первого элемента Количества т.е. 100.Предварительный выбор значения из выпадающего списка (Combo box) в extjs?

enter image description here

Проблемы: он должен загрузить Кол-во: 100 вместо загрузки пустого

Так я магазин определен в

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 поле для отображения Кол-во

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

Возможность увидеть эй: 100 в операторе оповещения

ответ

7

Я столкнулся с этой проблемой пару раз. Единственный способ, которым я на самом деле получил это решение, - позвонить setValue в поле со списком после загрузки магазина, вы могли бы просто добавить слушателя в магазин, но это всегда показалось мне несколько беспорядочным. У меня обычно есть автономный слушатель событий, как это:

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

EDIT: 18 января 2012

OK, как указано здесь полный рабочий пример ComboBox со значением по умолчанию создаются. Это делается с использованием ExtJS 4.02, должно работать нормально с 4.07, хотя и не уверен в 4.1.

Убедитесь, что вы кладете правильный путь ExtJS в ссылках (см скобки в верхней части HTML), в противном случае просто поставить как комбо-пример и data.json на том же уровне каталогов, и они должны работать нормально:

data.json:

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

комбо-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

Я собирался опубликовать решение по той же схеме (+1). Mad-D, вы должны убедиться, что фрагмент Geronimo ПЕРЕД вызовом загрузки в магазин. Если он все еще не работает, какие-либо ошибки в firebug? Можете ли вы проверить, что в магазине, после загрузки, действительно есть записи? –

+0

Это всегда отлично работает для меня ... Это для ExtJS ** 4 **? Ваш магазин и combobox все еще настроены так же, как указано выше? Вы положили пример выше вне всех других функций, но внутри Ext.onReady? Если вы хотите, чтобы об этом было плохо (но не динамическом), вы всегда можете добавить конфигурацию 'value' в combobox, например:' значение: '100' 'или' значение: 100' – Geronimo

+0

Я пробовал эти вещи 1 . 'store.getAt (' 0 '). get (' qty '))' в alert и получил значение как ожидалось, т.е. 100, но не установил значение по умолчанию. 2. когда я попробовал значение: «100» и значение: 100 он не показывает значение по умолчанию 100. –

Смежные вопросы