2016-04-11 1 views
0

ich versuche, dass eine Combo laden die Elemente (DataStore) mit AutoLoad: true, aber ich weiß nicht, ob ich das richtig mache. Ich bin ein kleiner Neuling mit Extjs, also, seien Sie nicht unhöflich, bitte heheCombobox ignoriert autoLoad [Extjs]

hier ist der Code!

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 
       }] 
      }] 

Das Problem ist in der Combo: uuidChannel wenn jemand dank helfen kann, eine Menge!

+0

Combo mit 'name: 'uuidChanel'' konfiguriert mit' store: null' ... –

+0

@SergeyNovikov vertrauen Sie mir, ich habe mehrmals ohne' store: null 'versucht, und nichts passiert. – Diego

+0

Ah, sorry, habe den ganzen Code nicht sorgfältig geprüft. –

Antwort

0

Warum genau denken Sie, dass autoLoad: true funktioniert? Denn wenn Sie versuchen, den letzten Combobox-Picker zu öffnen, wird er immer noch geladen?

denke ich, Ihr Problem ist, dass neue Speicher jedes Mal Combo name: 'uuidResponseParameterType'change Ereignis-Trigger und Speicher autoLoad: true bedeutet erstellt, dass

Geschäft der Load-Methode automatisch nach der Erstellung

genannt wird

Sie haben Speicher erstellen nur einmal und laden (oder lokal filtern) es mit neuen extraParams auf Combo Ereignis.

+0

Woops, ich verstehe wirklich nicht, was du meinst hehe, aber ich habe es repariert! – Diego

0

Die Sache ist, dass (dumm)

channel.clearValue();

Dieses Feld war das Problem. Dieser „clearvalue“ war dort, weil ich glaubte, dass die Daten von „uuid“ zu löschen, es mir die neuen Daten mit dem „bind“ auf den Boden

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

So zurückkehrt, ich denke, dass ich die neuen Daten setzen, aber dieser "clearValue" löschte gerade die Daten mit der "Bindung" die ich hatte. So beseitige ich einfach das channel.clearValue();, und das löst das Problem! :)

+0

Nun bin ich völlig verwirrt, was Sie eigentlich unter "Combobox ignoriert AutoLoad" meinen, weil in Ihrem Codebeispiel 'clearValue()' nichts mit 'autoLoad' zu tun hat ... Können Sie bitte Ihre Frage aktualisieren, damit sie Ihre tatsächliche widerspiegelt Problem? Später werde ich meine Antwort aktualisieren, um Ihnen echte Probleme mit Ihrem Code zu zeigen. –

+0

gut @SergeyNovikov, zuerst, sorry Kumpel, für die Antwort zu spät. Lassen Sie mich Ihnen erklären, ich habe 2 Combobox, und die zweite, hat keine Daten, aber die erste hat Daten, so habe ich eine 'Change' -Funktion, um die Daten, die für die erste Kombination an die zweite übergeben wurde , und das 'autoLoad: true', sollte die Daten, die für das erste' combo' übergeben wurden, auf den zweiten laden, aber, wie ich bereits sagte, wurde der 'clearValue();' gelöscht meine Daten (die Daten der ersten "Combo", wenn dies zum zweiten überging. Ich weiß nicht, ob du das verstehst, aber das war's! – Diego