Knockout.js 当用户单击查看详细信息时,使用knockoutjs加载子项

Knockout.js 当用户单击查看详细信息时,使用knockoutjs加载子项,knockout.js,Knockout.js,我有一张人的名单,每个人都有一张宠物的名单。 我想获取页面加载中的人员列表。 如果用户单击“查看宠物”,我只想加载一个人的宠物列表 下面是jsfiddle使用coffeescript的示例 getPets似乎在加载时被反复调用 <a href="#" data-bind="click: $root.getPets()">view pets</a> 编辑 我已经通过直接向Person对象添加方法解决了这个问题。 当您使用单击绑定(或事件绑定)时,您希望根据对函数的

我有一张人的名单,每个人都有一张宠物的名单。 我想获取页面加载中的人员列表。 如果用户单击“查看宠物”,我只想加载一个人的宠物列表

下面是jsfiddle使用coffeescript的示例

getPets似乎在加载时被反复调用

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

编辑

我已经通过直接向Person对象添加方法解决了这个问题。

当您使用
单击
绑定(或
事件
绑定)时,您希望根据对函数的引用而不是实际调用来绑定它

所以,你只想做:

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


否则,代码实际上会被执行。除非函数返回您想要使用的实际函数,否则您可能不希望执行此操作。

当您使用
单击
绑定(或
事件
绑定)时,您希望将其绑定到对函数的引用,而不是函数的实际调用

所以,你只想做:

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


否则,代码实际上会被执行。除非函数返回您想要使用的实际函数,否则您可能不希望执行此操作。

我不知道可以向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        

我不知道我可以向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