2012-11-15 32 views
0

我是CoffeeScript的新手,我想從Flickr網站獲取JSON。Uncaught TypeError:Object#沒有方法'getData'

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 : '[email protected]' 
     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

「遺漏的類型錯誤:對象#有沒有方法 '的getData'」 返回

謝謝你的幫助。

+0

好像你沒有正確使用類的語法:http://coffeescript.org/#classes。 –

+0

這似乎工作:http://jsbin.com/iruruk/1/edit – Blender

+0

你也可以看看生成的JavaScript,你會看到爲什麼你得到的錯誤:http://jsbin.com/eqoduv/4 /編輯。 –

回答

2

getData定義爲一個功能(甚至不是一個方法)是私有的Photo類,而不是偶可見於Photo實例:

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

同樣,你的json是一個私有類變量,這將是由所有Photo的實例共享。這意味着您的回調中jsonjson = nulljson不一樣@json

你想getData是一個Photo方法。您根本不需要在Photo級別定義@json級別,則可以將該級別保留爲您的$.getJSON回調。你可以清理你的「運行successCallback如果它是一個功能」使用測試「這是一個功能」版本existential operator的:

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

注意在successCallback?()?時,會檢查successCallback是試前一個功能稱它。

相關問題