2016-04-11 4 views
0

Я пытаюсь сделать эту комбо-загрузку элементов (dataStore) с помощью AutoLoad: true, но, я не знаю, правильно ли я делаю это правильно. Я маленький новичок с Extjs, так что не грубите, пожалуйста, heheCombobox игнорирует autoLoad [Extjs]

вот код!

items: [{ 
       xtype: 'form', 
       padding: 20, 
       name: 'formReplyParameters', 
       layout: 'anchor', 
       fieldDefaults: { 
        msgTarget: 'under', 
        labelAlign: 'top' 
       }, 
       defaults: { 
        padding: 10 
       }, 
       items: [{ 
        xtype: 'checkboxfield', 
        name: 'interactive', 
        inputValue: true, 
        fieldLabel: 'Interactive', 
        anchor: '100%' 
       }, { 
        xtype: 'textfield', 
        name: 'timeResponse', 
        fieldLabel: 'Time response', 
        anchor: '100%' 
       }, { 
        xtype: 'combobox', 
        fieldLabel: 'Alert channel', 
        name: 'uuidResponseParameterType', 
        queryMode: 'local', 
        store: new Ext.data.Store({ 
         fields: [{ 
          name: 'description', 
          type: 'string' 
         }, { 
          name: 'name', 
          type: 'string' 
         }, { 
          name: 'uuid', 
          type: 'string' 
         }], 
         autoLoad: true, 
         hideTrigger: true, 
         minChars: 1, 
         triggerAction: 'query', 
         typeAhead: true, 
         proxy: { 
          type: 'ajax', 
          url: "../blabla", 
          actionMethods: { 
           create: "POST", 
           read: "POST", 
           update: "POST", 
           destroy: "POST" 
          }, 
          extraParams: { 
           action: "catalog", 
           catalog: "parametersType", 
           params: JSON.stringify({ 
            uuidToken: Ext.connectionToken 
           }) 
          }, 
          reader: { 
           type: 'json', 
           root: 'List' 
          }, 
          listeners: { 
           exception: function(proxy, response, operation, eOpts) { 
            var responseArray = JSON.parse(response.responseText); 
            Ext.Notify.msg(responseArray.message, { 
             layout: "bottomright", 
             delay: 5000, 
             type: "error" 
            }); 
           } 
          } 
         } 
        }), 
        anchor: '100%', 
        typeAhead: true, 
        triggerAction: 'all', 
        valueField: 'uuid', 
        displayField: 'description', 
        allowBlank: false, 
        listeners: { 
         change: function (combo, value) { 
          var type = combo.valueModels[0].data.name; 
          var channel = me.down('[name="uuidChanel"]'); 
          channel.clearValue(); 
          var channelStore = new Ext.data.Store({ 
           fields: [{ 
            name: 'description', 
            type: 'string' 
           }, { 
            name: 'name', 
            type: 'string' 
           }, { 
            name: 'uuid', 
            type: 'string' 
           }], 
           autoLoad: true, 
           hideTrigger: true, 
           minChars: 1, 
           triggerAction: 'query', 
           typeAhead: true, 
           proxy: { 
            type: 'ajax', 
            url: "../handler/custom/customEvent.ashx", 
            extraParams: { 
             action: "catalog", 
             catalog: type, 
             params: JSON.stringify({ 
              uuidToken: Ext.connectionToken 
             }) 
            }, 
            reader: { 
             type: 'json', 
             root: 'list' 
            }, 
            listeners: { 
             exception: function(proxy, response, operation, eOpts) { 
              var responseArray = JSON.parse(response.responseText); 
              Ext.Notify.msg(responseArray.message, { 
               layout: "bottomright", 
               delay: 5000, 
               type: "error" 
              }); 
             } 
            } 
           } 
          }); 
          channelStore.load(); 
          channel.bindStore(channelStore); 
         } 
        } 
       }, { 
        xtype: 'combo', 
        name: 'uuidChanel', 
        fieldLabel: 'Channel', 
        valueField: 'uuid', 
        displayField: 'description', 
        anchor: '100%', 
        store: null, 
        allowBlank: false 
       }] 
      }] 

Проблема заключается в комбо: uuidChannel если кто может помочь, спасибо!

+0

Combo with 'name: 'uuidChanel'' настроен с' store: null' ... –

+0

@SergeyNovikov доверяет мне, я несколько раз пробовал без «store: null», и ничего не происходит. – Diego

+0

Ах, извините, не проверил весь код тщательно. –

ответ

0

Почему именно вы думаете, что autoLoad: true doest work? Потому что, когда вы пытаетесь открыть последний сборщик combobox, он все еще загружается?

Я думаю, ваша проблема в том, что новый магазин создается каждый раз комбо name: 'uuidResponseParameterType' триггер change событие и магазин autoLoad: true означает, что метод загрузки

магазина автоматически вызывается после создания

Вы должны создать магазин просто один раз и загрузите (или фильтруйте локально) его новым extraParams на комбо change.

+0

Woops, я действительно не понимаю, что у вас значит хе-хе, но я это исправил! – Diego

0

Дело в том, что (глупо)

channel.clearValue();

это поле было все проблемы. это «ClearValue» был там, потому что я считал, что удаление данных из «UUID», он возвращался мне новые данные с «связываются» с нижним

channelStore.load(); 
channel.bindStore(channelStore); <<< 

Так что, я думаю, что я поставил новые данные, но этот «clearValue» просто стирал данные с помощью «привязки», которые у меня были. Итак, я просто исключаю это channel.clearValue();, и это решает проблему! :)

+0

Теперь Im полностью путают то, что на самом деле вы подразумеваете под «combobox игнорирует autoLoad», потому что в вашем примере кода 'clearValue()' не имеет ничего общего с хранилищем 'autoLoad' ... Можете ли вы, пожалуйста, обновить свой вопрос, чтобы он отражал ваш фактический вопрос? Позже я обновил свой ответ, чтобы показать вам реальные проблемы с вашим кодом. –

+0

ну @SergeyNovikov, во-первых, извините, за вас ответили слишком поздно. Позвольте мне объяснить вам, у меня есть 2 'combobox', а у второго нет данных, но у первого есть данные, поэтому у меня есть функция' change', чтобы изменить данные, которые были переданы для первого комбо ко второму , и что 'autoLoad: true', должен загружать данные, которые были переданы для первого« комбо »ко второму, но, как я уже сказал,' clearValue(); 'был удален мои данные (данные первого «комбо», когда это перешло ко второму). Я не знаю, понимаете ли вы, но это все! – Diego

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