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 nomethod'getData'」が返されます。

ご協力ありがとうございました。

4

1 に答える 1

2

これは、クラスに対してプライベートであり、インスタンスからも見えないgetData関数 (メソッドでさえない) として定義します。PhotoPhoto

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

同様に、 yourjsonは、 のすべてのインスタンスによって共有されるプライベート クラス変数ですPhoto。つまり、jsoninはコールバックjson = nullと同じではありませんjson@json

あなたgetDataPhoto方法になりたいです。@jsonレベルで定義する必要はまったくありません。コールバックPhotoに任せることができます。また、存在演算子の「is this a function」バージョンを使用して、$.getJSON「run if it is a function」テストをクリーンアップできます。successCallback

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

?inに注意してください。関数を呼び出す前にsuccessCallback?()チェックします。successCallback

于 2012-11-15T04:03:04.970 に答える