从knockout foreach循环中的radio元素获取javascript对象

时间:2014-02-06 20:43:05

标签: javascript knockout.js

这是我的HTML代码:

<span data-bind="foreach: complimentaryCustomerList">
    <label><span data-bind="text: ($data.Surname + ', ' + $data.GivenName)"></span>
        <input type="radio" name="companion" data-bind="value: $data, checked: $parent.complimentaryCustomerSelection" /> 
    </label>
</span>

我的问题是self.complimentaryCustomerSelection()显示为“[object object]”,一个实际的字符串。有没有办法从数组中传递一个对象?

1 个答案:

答案 0 :(得分:0)

您似乎希望checkedValue绑定/处理程序的功能与单选按钮的复选框一起使用。可悲的是,单选按钮不是那么简单,需要一些特殊的考虑因素,如this post

中提供的两个例子所示。

除了使用.grep之外,在这些示例中,替代方法是使用JSON.parseko.toJSON来序列化JS和JSON(Example)之间的对象。

 <input type="radio" name="companion" data-bind="value: function(){return ko.toJSON($data)}(), checked: $parent.complimentaryJSONHolder "/> 


 vm.complimentaryJSONHolder.subscribe(function(nv){
   vm.complimentaryJSHolder(JSON.parse(nv))
 })

任何一种解决方案都能“正常工作”,但最终听起来使用组合框/选择可能会更好,因为它们对对象有更好的支持/绑定。

注意:使用http://cdnjs.cloudflare.com/ajax/libs/knockout/2.2.1/knockout-min.js替换其他两个小提琴上的外部资源以进行淘汰赛