0

我是 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 # has no method 'getData'”

感谢您的帮助。

4

1 回答 1

2

这定义getData为类私有的函数(甚至不是方法),甚至对实例Photo不可见:Photo

class Photo
  getData = (successCallback) -> ...

同样, yourjson是一个私有类变量,将由Photo. 这意味着jsoninjson = null与您json@json回调中的不同。

你想getData成为一种Photo方法。您根本不需要@jsonPhoto级别定义,您可以将其留给您的$.getJSON回调。并且您可以使用存在运算符的“这是一个函数”版本来清理您的“successCallback如果它是一个函数则运行”测试:

class Photo
  getData: (successCallback) ->
    $.getJSON(
      #...
      (data) =>
        @json = data.photos.photo
        successCallback?()
    )

请注意?in ,在尝试调用它之前successCallback?()检查它是一个函数。successCallback

于 2012-11-15T04:03:04.970 回答