1

現在、Flickr から 5 枚の写真を取得し、タイトルをリストとして表示する簡単なアプリケーションを作成しています。最初は@current_photosこれでうまくいくのですが、Knockout.js( @currentPhotos) を使うとうまくいきません。

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 : '29242822@N00'
        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/

ご親切にありがとうございます。

4

1 に答える 1

1

計算されたオブザーバブルで依存関係の追跡がどのように機能するかにより、次のようになります。

エバリュエーター関数の実行中、KOは、エバリュエーターが値を読み取るオブザーバブル(または計算されたオブザーバブル)のログを保持します。

したがって、計算された内部でオブザーバブルを呼び出す必要があります。それらを参照するだけでは不十分です。

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

そして、私はあなたがオブジェクトの中にではなく、オブジェクト@photosko.observableArray中にあると宣言することをお勧めしますFlickrPhotoListViewModel

デモJSFiddle

于 2013-03-16T06:18:10.950 に答える