2014-10-02 6 views
1

Я пытаюсь создать каскадный combobox, но я не могу заполнить второе поле со списком.Ext JS Cascading Combobox

В настоящее время у меня есть что-то вроде этого:

var comboStore = null; 
comboStore = Ext.create('Ext.data.Store', { 
    fields: ['ID', 'Name', 'isChecked'], 
    data: field.values 
}); 
console.log(comboStore); 
var comboboxField = Ext.create('SGS.view.field.ComboBox', { 
    listeners: { 
     select: function (combo, record, index) { 
      var tablescomboStore = null; 
      Ext.Ajax.request({ 
       url: 'Services/DBSourceService.ashx', 
       method: 'GET', 
       params: { 
        id: combo.value 
       }, 
       reader: { 
        type: 'json', 
      rootProperty: 'data', successProperty: 'success' 
        //root: 'items' 
       }, 
       success : function(response, opts) 
       { 
        var tablescomboStore = null; 
        tablesComboStore = Ext.create('Ext.data.Store', { 
         response: ['ID', 'Name', 'isChecked'], 
         data: response.values 
        }); 
        var tablesComboboxField = Ext.create('SGS.view.field.ComboBox', { 
         cls: 'ACombo3', 
         labelSeparator: '', 
         labelWidth: 110, 
         width: 400, 
         fieldLabel: response.name, 
         name: response.propName, 
         displayField: 'Name', 
         valueField: 'ID', 
         forceSelection: true, 
         editable: false, 
         store: tablesComboStore 
        }); 
        if (tablesComboStore != null) { 
         var selected = null; 
         Ext.each(tablesComboStore.data.items, function (item) { 
          if (item.data.Checked) { selected = item; } 
         }); 

         if (selected) tablesComboboxField.select(selected); 
        } 
        tablesComboboxField.addListener('select', checkDirty); 
        instance.add(tablesComboboxField); 
       }, 
      }); 
     } 
    }, 
    cls: 'ACombo2', 
    labelSeparator: '', 
    labelWidth: 110, 
    width: 400, 
    fieldLabel: field.name, 
    name: field.propName, 
    displayField: 'Name', 
    valueField: 'ID', 
    forceSelection: true, 
    editable: false, 
    store: comboStore 
}); 

if (comboStore != null) { 
    var selected = null; 
    Ext.each(comboStore.data.items, function (item) { 
     if (item.data.Checked) { selected = item; } 
    }); 

    if (selected) comboboxField.select(selected); 
} 
comboboxField.addListener('select', checkDirty); 
instance.add(comboboxField); 

Я сначала получить JSon который я наношу в магазин, чтобы создать несколько полей формы, такие как имя, значение и ComboBox. Я хочу получить второй Json, чтобы заполнить второе поле со списком после первого выбора combobox.

Вторая сборная создается, но без данных.

ответ

1

вы не можете использовать ответ напрямую, так как это строка. попытаться разобрать его первый:

здесь вы идете:

var myArr = JSON.parse(response.responseText); 
Ext.each(myArr.values, function (value) { 
    var tablescomboStore = null; 
    tablesComboStore = Ext.create('Ext.data.Store', { 
     fields: ['ID', 'Name', 'isChecked'], 
     data: myArr.values 
    }); 
    var tablesComboboxField = Ext.create('SGS.view.field.ComboBox', { 
     cls: 'ACombo3', 
     labelSeparator: '', 
     labelWidth: 110, 
     width: 400, 
     fieldLabel: value.name, 
     name: value.propName, 
     displayField: 'Name', 
     valueField: 'ID', 
     forceSelection: true, 
     editable: false, 
     store: tablesComboStore 
    }); 
+0

он работал, наконец! благодаря – dex90

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