2012-04-01 9 views
5

Ho cercato questo e non riesco a trovare una risposta riuscita, sto usando una chiamata jQuery ajax e non riesco a ottenere la risposta alla richiamata.Coffeescript ottenendo l'ambito appropriato dal metodo di richiamata

Ecco il mio codice CoffeeScript:

initialize: (@blog, @posts) -> 
    _url = @blog.url 
    _simpleName = _url.substr 7, _url.length 
    _avatarURL = exports.tumblrURL + _simpleName + 'avatar/128' 
    $.ajax 
     url: _avatarURL 
     dataType: "jsonp" 
     jsonp: "jsonp" 
     (data, status) => handleData(data) 

handleData: (data) => 
    console.log data 
    @avatar = data 

Ecco il JS compilato:

Blog.prototype.initialize = function(blog, posts) { 
    var _avatarURL, _simpleName, _url, 
     _this = this; 
    this.blog = blog; 
    this.posts = posts; 
    _url = this.blog.url; 
    _simpleName = _url.substr(7, _url.length); 
    _avatarURL = exports.tumblrURL + _simpleName + 'avatar/128'; 
    return $.ajax({ 
     url: _avatarURL, 
     dataType: "jsonp", 
     jsonp: "jsonp" 
    }, function(data, status) { 
     return handleData(data); 
    }); 
    }; 

    Blog.prototype.handleData = function(data) { 
    console.log(data); 
    return this.avatar = data; 
    }; 

ho provato una dozzina di varianti e non riesco a capire come scrivere questo?

Grazie.

risposta

2

I suoi argomenti non sono corrette, si sta passando il callback come secondo parametro a $.ajax. Dovresti passarlo come success: nelle opzioni, o aggiungerlo all'oggetto Ajax posticipato.

Poiché handleData sembra collegato a un oggetto, che è probabile che sia this, è necessario inserirlo come prefisso con @.

Mentre il tuo modo di passare l'URL funziona, l'API ora suggerisce di passare l'URL come primo parametro e le opzioni come secondo.

$.ajax _avatarURL, 
    dataType: "jsonp" 
    jsonp: "jsonp" 
    success: (data, status) => @handleData(data) 

O

$.ajax _avatarURL, 
    dataType: "jsonp" 
    jsonp: "jsonp" 
.done (data) => @handleData(data) 
+0

stesso qui ** handleData ** non viene mai chiamato restituisce solo un metodo, non il ritorno di ** handleData ** – pandabrand

+0

Spiacente, cosa restituisce un metodo? inizializzare? Per essere chiari, al momento l'inizializzazione restituirà un oggetto jQuery jqXHR. http://api.jquery.com/Types/#jqXHR. I dati non vengono restituiti. – loganfsmyth

+0

Scusa, avevi ragione, avevo solo bisogno di un'altra tazza di caffè. ;-) – pandabrand

2

Dal handleData è in prototipo Blog s', non è una variabile di portata, probabilmente si vuole questo:

(data, status) => @handleData(data) 
+0

il metodo non viene eseguito solo restituisce il metodo ** ** handleData non il rendimento effettivo di tale metodo. – pandabrand

Problemi correlati