2016-08-26 4 views
0

Verwenden von ExtJS 5.1.0.Verwenden von Ext.util.TaskRunner zum Anzeigen einer Uhr in einer Lademaske

Konnte nicht wirklich eine andere Möglichkeit, dies zu tun, aber ich brauche einen Timer in einer Lastmaske in Erwartung einer Ajax-Antwort anzuzeigen. Auf success würde ich dann die Maske deaktivieren und den Timer zerstören.

Der Code funktioniert ohne Ext.util.TaskRunner, so meine Modifikation folgendes zu tun war:

task = runner.start({ 
     run: function() { 
      // show loadMask during request 
      Ext.getBody().mask("Computing..." + Ext.Date.format(new Date(), 'g:i:s A')); 
     }, 
     interval: 10 
    }); 

    // payload for POST 
    obj = { 
     query: { 
      payload: atom 
     } 
    }; 

    Ext.Ajax.request({ 
     cors: true, 
     timeout: 600000, //default is 30 seconds 
     useDefaultXhrHeader: false, 
     url: url, 
     jsonData: obj, 
     headers: { 
      'Accept': 'application/json' 
     }, 
     disableCaching: false, 

     success: function(response) { 
      // do stuff 

      // stop loadMask 
      Ext.getBody().unmask(); 
      Ext.util.TaskRunner.destroy(task); 
     } 
    }); 

Auf success es „Sachen machen“, aber es ist jetzt nicht den Timer zu zerstören und jetzt ist es nicht Entfernen der Maske (dies bestätigt wird, da ich erhalte eine Fehlermeldung, dass: TypeError: Ext.util.TaskRunner.destroy is not a function. (In 'Ext.util.TaskRunner.destroy(task)', 'Ext.util.TaskRunner.destroy' is undefined) ...

ich stelle fest, dass die TaskRunner weiterhin laufen, bis es entweder zerstört wird oder gestoppt wird, aber dies scheint nicht so zu funktionieren gewünscht ..

Ich muss schließlich die Aufgabe während des Lebenszyklus des Ajax-Aufrufs ausführen, und mir wird klar, dass ich die LoadMask mehrmals anrufe, um zu erreichen, was ich brauche.

---- ---- EDIT

Verstanden, teilweise: Ich fehlte die repeat Konfigurationsparameter (I, bevor die repeat Parameter versucht hatte, ohne Verwendung des interval Parameters, und es hat nicht Arbeit, aber die Kombination von diesen ist genau das, was diese erhalten wurde benötigt, um zu arbeiten Doh Sie denken, würden sie diesen einfachen Anwendungsfall als ein Beispiel in der Dokumentation gegeben haben, aber leider ...):.!

task = runner.start({ 
     run: function() { 
      // show loadMask during request 
      Ext.getBody().mask("Computing..." + Ext.Date.format(new Date(), 'g:i:s A')); 
     }, 
     interval: 10, 
     repeat: 1 
    }); 

Und damit musste ich kein stop oder destroy auf dem Objekt ausgeben .

Die Uhr wird jedoch nicht wie gewünscht aktualisiert, was sinnvoll ist, da die Task nur einmal ausgeführt wird. Sieht so aus, als ob ich immer noch feststecke.

+0

Was meinen Sie damit, dass es den Timer nicht zerstört? Wie bestimmen Sie das? Du meldest eine ganze Reihe von Malen, aber du nennst immer nur einmal die Maske. Mach eine Geige, die das Problem demonstriert, der Ajax-Aufruf ist nicht wirklich relevant. –

+0

Entschuldigung, ich hatte einige kritische Informationen bezüglich des Fehlers, den ich mit der 'destroy' Methode bekommen habe, weggelassen. –

Antwort

0

Endlich! Hier

ist die Konfiguration, die funktionierte:

var task, runner = new Ext.util.TaskRunner(); 

    task = runner.newTask({ 
     run: function() { 
      // show loadMask during request 
      Ext.getBody().mask("Computing..." + Ext.Date.format(new Date(), 'g:i:s A')); 
     }, 
     interval: 10000 
    }); 

    task.start(); 

Und dann eine einfache task.stop(); stoppte die Aufgabe einmal Erfolg Rückruf geschah. Der fehlende Schlüssel scheint eine NewTask. Interessante zu definieren. Schätze, es hilft, die Beispiele in der Sencha-Dokumentation genauer zu lesen.

Verwandte Themen