2013-03-16 55 views
1

現在我正在寫一個簡單的應用程序,它獲得來自Flickr的五張照片,並顯示標題爲列表。起初,我試圖@current_photos這工作不錯,但是當我使用Knockout.js(@currentPhotos),這是行不通的。與Knockout.js簡單的Flickr應用程序不工作(JSBin準備)

root = exports ? this 
class root.Flickr 
    constructor: -> 
    @photos = [] 
    $.getJSON(
     'http://www.flickr.com/services/rest/?jsoncallback=?' 
     format : 'json' 
     method : 'flickr.photos.search' 
     api_key : '7965a8bc5a2a88908e8321f3f56c80ea' 
     user_id : '[email protected]' 
     per_page : 5 
    ).done((data) => 
     $.each data.photos.photo, (i, item) => 
     @photos.push item 
    ) 

root = exports ? this 
class root.PhotoListViewModel 
    index = null 
    currentPhotos = [] 
    constructor: -> 
    flickr = new Flickr 
    # @current_photos = flickr.photos ###### WORKS GOOD 
    flickr.photos = ko.observableArray [] 
    @currentPhotos = ko.computed -> 
     flickr.photos 

HTML是如下:

<body> 

<h4>Photo List</h4> 
<ul data-bind="foreach: currentPhotos"> 
    <li> 
     title: <span data-bind="text: title"> </span> 
    </li> 
</ul> 

</body> 

我創建如下JSBin頁: http://jsbin.com/avazak/7/

謝謝你的好意。

+0

你真的要傳遞一個函數來ko.computed? – Ven 2013-03-16 02:06:35

回答

1

因爲dependency tracking作品如何計算觀察到的:

當你評估功能正在運行,KO會記錄任何觀測值(或計算觀測),你的評估讀的價值。

所以,你需要呼叫你的計算內觀測是不夠的參考他們:

@currentPhotos = ko.computed -> 
    flickr.photos() 

而且我會suggets你聲明@photos作爲ko.observableArrayFlickr對象中不在PhotoListViewModel

演示JSFiddle

+0

非常感謝!我在這裏寫了一些更改的代碼:http://jsbin.com/avazak/16/edit – weed 2013-03-17 02:10:01