未捕获的TypeError:对象#没有方法'getData'

时间:2012-11-15 03:32:29

标签: jquery coffeescript

我是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'”被返回。

感谢您的帮助。

1 个答案:

答案 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?()在尝试调用之前是一个函数。