2012-11-26 49 views
0
我有淘汰赛, 一个问题,当我检查一箱

所有检查,他们都被检查......复选框阵列正在对点击

这是我有: _Categories_List拥有所有项目, 和 My_categories是空列表,我想有每个ID添加

这是代码:

<!-- ko foreach: _Categories_List --> 
    <input type="checkbox" data-bind="attr: {value: $data}, checked: $root.My_categories" /> 
    <span data-bind="text: CODE"></span><br /> 
<!-- /ko --> 

,这是代码的JS部分(我真的不能查NGE此为代码是如何在文档中,因为我建过别人的工作,并应使用相同的代码 - 指的是mapping.fromJS):

var Poi = new Object(); 
Poi.My_categories = []; 
var _Poi = ko.mapping.fromJS(Poi); 

var Categories_List = []; 
var _Categories_List = ko.mapping.fromJS(Categories_List); 

$(document).ready 
(
    function() {   
     ko.applyBindings(_Poi); 
     // here there's an ajax function to load the categories returned in i_Input.My_Result, then: 
     ko.mapping.fromJS(i_Input.My_Result, _Categories_List); 
    } 
); 

这是从阿贾克斯加载哪些对象看起来像:

{"My_Result":[ 
    {"CODE":"chalet","DEF_POIS_CATEGORY_ID":2,"DESCRIPTION":"chalet","ENTRY_DATE":"2012-10-10","ENTRY_USER_ID":2,"OWNER_ID":1}, 
    {"CODE":"vila","DEF_POIS_CATEGORY_ID":3,"DESCRIPTION":"villa","ENTRY_DATE":"2012-10-10","ENTRY_USER_ID":2,"OWNER_ID":1} 
]} 

回答

0

checked绑定工作,关闭输入元素的value的。在你的代码中,你设置的值等于一个对象,这会变成[object Object],所以你的两个输入都具有相同的值,这就是为什么选中这两个输入。

因此,您希望将您的值设置为等于对象上的某个键,如CODE属性。如果有必要,那么您可以使用计算的观察值来表示实际的对象。

这里有一个例子:http://jsfiddle.net/rniemeyer/7n9gR/

+0

感谢...这样的作品,但事情是我希望把所有的数据里面My_Categories,为例子,如果我选择了1个项目,我想my_categories让所有:“CODE”:“chalet”,“DEF_POIS_CATEGORY_ID”:2,“DESCRIPTION”:“chalet”,“ENTRY_DATE”:“2012-10-10”,“ENTRY_USER_ID”:2,“OWNER_ID”:1 } 有什么想法? 非常感谢! –

+0

你可能想要添加一个计算来表示实际的对象。就像:http://jsfiddle.net/rniemeyer/vQMRX/ –

+0

谢谢你,似乎正是我所需要的,但我现在得到以下错误:“不能写一个值到ko.computed,除非你指定一个'写'选项,如果你想读取当前值,不要传递任何参数“。 代码流是这样的: - 用Poi为空来初始化参数 - 用ajax读取数值并填充Poi –