2012-04-01 2 views
5

Я искал это и не могу найти успешный ответ, я использую jQuery ajax call, и я не могу получить ответ на обратный вызов.Coffeescript получает правильную область от метода обратного вызова

Вот мой 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 

Вот скомпилированный JS:

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

Я попробовал десяток вариантов, и я не могу понять, как написать это?

Спасибо.

ответ

2

Ваши аргументы неверны, вы передаете обратного вызова в качестве второго параметра $.ajax. Вы должны передать его как success: в опциях или добавить его в объект отложенного Ajax.

Поскольку handleData выглядит так, как будто он прикреплен к объекту, который, вероятно, this, вам необходимо указать его @.

Хотя ваш способ передачи URL-адреса работает, API теперь предлагает передать URL-адрес в качестве первого параметра, а опции - вторым.

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

ИЛИ

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

такой же здесь ** handleData ** никогда не называется, он просто возвращает метод, а не возврат ** handleData ** – pandabrand

+0

Извините, что возвращает метод? инициализировать? Чтобы быть ясным, в данный момент инициализация вернет объект jQXHR jQuery. http://api.jquery.com/Types/#jqXHR. Там данные не возвращаются. – loganfsmyth

+0

Извините, вы были правы, мне просто нужна еще одна чашка кофе. ;-) – pandabrand

2

С handleData в прототипе Blog «s, а не переменная в области видимости, вы, вероятно, хотите:

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

метод никогда не запускается на выполнение он просто возвращает метод ** ** handleData не фактический возврат этого метода. – pandabrand

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