【问题标题】:Coffeescript getting proper scope from callback methodCoffeescript 从回调方法中获取适当的范围
【发布时间】:2012-04-15 06:25:38
【问题描述】:

我已经搜索过这个,但似乎找不到成功的答案,我正在使用 jQuery ajax 调用,我无法得到对回调的响应。

这是我的咖啡脚本代码:

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

我已经尝试了十几种变体,但我不知道该怎么写?

谢谢。

【问题讨论】:

    标签: jquery scope coffeescript javascript


    【解决方案1】:

    由于handleDataBlog 的原型中,而不是范围内的变量,您可能想要这个:

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

    【讨论】:

    • 该方法永远不会被执行它只是返回方法 handleData 而不是该方法的实际返回。
    【解决方案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)
    

    【讨论】:

    • same here handleData 永远不会被调用它只是返回一个方法,而不是 handleData 的返回
    • 对不起,什么返回一个方法?初始化?需要明确的是,此时 initialize 将返回一个 jQuery jqXHR 对象。 api.jquery.com/Types/#jqXHR。没有返回数据。
    • 对不起,你是对的,我只是需要再来一杯咖啡。 ;-)
    猜你喜欢
    • 1970-01-01
    • 2015-07-27
    • 1970-01-01
    • 1970-01-01
    • 2012-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多