2012-04-01 28 views
5

Tôi đã tìm kiếm điều này và dường như không tìm thấy câu trả lời thành công, tôi đang sử dụng cuộc gọi jQuery ajax và tôi không thể nhận phản hồi cho cuộc gọi lại.Coffeescript nhận phạm vi thích hợp từ phương thức gọi lại

Đây là mã coffeescript tôi:

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 

Đây là JS biên soạn:

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

Tôi đã thử một chục biến thể và tôi không thể tìm ra cách để viết những dòng này?

Cảm ơn.

Trả lời

2

lập luận của bạn là không chính xác, bạn đang đi qua gọi lại như tham số thứ hai để $.ajax. Bạn nên chuyển nó thành success: trong các tùy chọn hoặc thêm nó vào đối tượng Ajax hoãn lại.

Kể từ khi xử lýData trông giống như nó được gắn vào một đối tượng, có khả năng là this, bạn cần đặt tiền tố nó với @.

Trong khi cách truyền URL của bạn hoạt động, API hiện đề xuất chuyển URL làm tham số đầu tiên và các tùy chọn dưới dạng thứ hai.

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

HOẶC

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

cùng ở đây ** handleData ** không bao giờ được gọi là nó chỉ trả về một phương thức, không phải trả về ** handleData ** – pandabrand

+0

Xin lỗi, cái gì trả về một phương thức? khởi tạo? Để rõ ràng, tại thời điểm khởi tạo sẽ trả về một đối tượng jQuery jqXHR. http://api.jquery.com/Types/#jqXHR. Có dữ liệu không được trả về. – loganfsmyth

+0

Xin lỗi, bạn đã đúng, tôi chỉ cần một tách cà phê khác. ;-) – pandabrand

2

Kể từ handleData là khai báo mẫu Blog 's, không phải là một biến trong phạm vi, có thể bạn muốn này:

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

phương pháp này không bao giờ được thực hiện nó chỉ trả về phương pháp ** handleData ** không phải là lợi nhuận thực tế của phương pháp đó. – pandabrand

Các vấn đề liên quan