Coffeescript从回调方法获得适当的范围

pan*_*and 5 javascript jquery scope coffeescript

我搜索过这个并且似乎无法找到成功的答案,我正在使用jQuery ajax调用,我无法得到回调的响应.

这是我的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
Run Code Online (Sandbox Code Playgroud)

这是编译好的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;
  };
Run Code Online (Sandbox Code Playgroud)

我已经尝试了十几个变种,我无法弄清楚如何写这个?

谢谢.

log*_*yth 2

您的参数不正确,您将回调作为第二个参数传递给$.ajax. 您应该将其作为success:选项传递,或者将其添加到 Ajax 延迟对象中。

由于handleData看起来像是附加到一个对象上的,这很可能是this,所以您需要在它前面加上前缀@

虽然您传递 URL 的方式有效,但 API 现在建议将 URL 作为第一个参数传递,将选项作为第二个参数传递。

$.ajax _avatarURL,
  dataType: "jsonp"
  jsonp: "jsonp"
  success: (data, status) => @handleData(data)
Run Code Online (Sandbox Code Playgroud)

或者

$.ajax _avatarURL,
  dataType: "jsonp"
  jsonp: "jsonp"
.done (data) => @handleData(data)
Run Code Online (Sandbox Code Playgroud)