我是CoffeeScript的新手,我想从Flickr网站获取JSON。
class Photo
json = null
getData = (successCallback) ->
$.getJSON(
'http://www.flickr.com/services/rest/?jsoncallback=?'
format : 'json'
method : 'flickr.photos.search'
api_key : '7965a8bc5a2a88908e8321f3f56c80ea'
user_id : '29242822@N00'
per_page : '100'
(data) =>
@json = data.photos.photo;
typeof successCallback == 'function' && successCallback())
photo = new Photo();
photo.getData successCallback = ->
console.log('Data loaded', photo.json)
(相同的代码在这里:http://jsbin.com/eqoduv/3/edit)
但“Uncaught TypeError:Object#没有方法'getData'”被返回。
感谢您的帮助。
答案 0 :(得分:2)
这将getData
定义为Photo
类专用的函数(甚至不是方法),甚至Photo
个实例都不可见:
class Photo
getData = (successCallback) -> ...
同样,您的json
是一个私有类变量,将由Photo
的所有实例共享。这意味着json
中的json = null
与回调中json
的{{1}}不同。
您希望@json
成为getData
方法。您根本不需要在Photo
级别定义@json
,您可以将其保留为Photo
回调。并且您可以使用existential operator的“这是一个函数”版本来清理“运行$.getJSON
如果它是一个函数”测试:
successCallback
请注意class Photo
getData: (successCallback) ->
$.getJSON(
#...
(data) =>
@json = data.photos.photo
successCallback?()
)
中的?
,successCallback?()
在尝试调用之前是一个函数。