2016-08-15 1 views
0

Ich füge ein loading spinner einer Seite hinzu, die eine API auf localhost aufruft. Zuvor sah der Code wie:CoffeeScript: Callback.call funktioniert nicht

getDocumentContents: (id, callback) -> 

    $.ajax(
    url: 'http://127.0.0.1:5000/doc/' + id 
    type: 'GET' 
     contentType: 'application/json' 
     success: callback 
) 

Es die jQuery $ Schnipsel Funktion verwendet und es funktioniert, den Rückruf anrufen, aber nicht angibt, an den Benutzer, dass etwas geschieht.

Das Hinzufügen von Code für die Spinner-Klasse Hinzufügen/Entfernen und das manuelle Aufrufen des Callbacks funktioniert nicht. Der Spinner erscheint und verschwindet wie erwartet, aber der Rückruf nie auslöst und keine JS Fehler zeigen in meiner Konsole nach oben:

getDocumentContents: (id, callback) -> 

    $.ajax(
    url: 'http://127.0.0.1:5000/doc/' + id 
    type: 'GET' 
     contentType: 'application/json' 
     beforeSend: -> 
     $('#sidePanelBody i.article-spinner').addClass('fa fa-spinner fa-pulse fa-3x fa-fw') 
    success: -> 
     $('#sidePanelBody i.article-spinner').removeClass('fa fa-spinner fa-pulse fa-3x fa-fw') 
     callback.call 
) 

Was mache ich falsch?

+1

(1) Ist das Ihre wirkliche Einrückung? (2) 'callback.call' ist einfach eine Funktionsreferenz,' callback.call() 'OTOH ist ein Funktionsaufruf ohne Argumente; Funktionsaufrufende Klammern sind in CoffeeScript erforderlich, wenn keine Argumente vorhanden sind. –

+0

Ja, das war Teil des Problems, entdeckte ich. Sieht so aus, als hätte ich auch einen Parameternamen weggelassen, der beim Erfolgsaufruf normalerweise ruhig weitergegeben wird. Ich werde eine Antwort schreiben. – huertanix

Antwort

0

Wie Mu darauf hinwies, brauchte der Funktionsaufruf() eher als .call. Ich hatte die letztere Syntax von der Annahme übernommen, dass CoffeeScript keine Parens wollte. Mir fehlte auch der Parameter "data", der zuvor automatisch übergeben wurde und nun offenbar sowohl in der Funktion Closure als auch im Callback Call explizit deklariert werden musste. Dieser Code funktioniert:

success: (data) -> 
    $('#sidePanelBody i.article-spinner').removeClass('fa fa-spinner fa-pulse fa-3x fa-fw') 
    callback(data) 
Verwandte Themen