0

私には人のリストがあり、各人にはペットのリストがあります。ページの読み込み時に人のリストを取得したいと思います。ユーザーがペットの表示をクリックした場合にのみ、1 人のペットのリストをロードしたい

ここに画像の説明を入力

ここにjsfiddleがcoffeescriptを使用しています

http://jsfiddle.net/eiu165/rScSL/15/

getPets はロード時に何度も呼び出されるようです

<a href="#" data-bind="click: $root.getPets()">view pets</a>

編集

メソッドを Person オブジェクトに直接追加することで解決しました。
http://jsfiddle.net/eiu165/rScSL/22/

4

2 に答える 2

3

clickバインディング (またはバインディング)を使用する場合event、関数の実際の呼び出しではなく、関数への参照に対してバインドする必要があります。

したがって、次のようにするだけです。

<a href="#" data-bind="click: $root.getPets">view pets</a>

それ以外の場合、コードは実際に実行されています。関数が実際に使用したい関数を返さない限り、これを行いたくないでしょう。

于 2012-10-22T17:07:17.533 に答える
0

Person クラスにメソッドを追加できるとは思いもしませんでした

自分のペットのリストを取得するために getPets メソッドを追加しました

Person = (data) ->
    name = ko.observable(data.name)
    lname = ko.observable(data.lname)  
    pets = ko.observableArray(data.pets)  
    getPets = (person) ->  
        data = '{"pets":[
            {"age": "5", "type": "dog"},
            {"age": "4", "type": "cat"}
        ]}'  
        json = $.parseJSON(data).pets 
        mappedItems = $.map(json , (i)->  Pet(i)  )  
        pets(mappedItems) 
    name:name
    lname:lname 
    pets:pets  
    getPets:getPets        

http://jsfiddle.net/eiu165/rScSL/21/

于 2012-10-22T18:09:38.493 に答える