Javascript 淘汰赛没有';t更改对象数组中的复选框状态
我正在使用对象数组创建复选框选择器,但由于某些原因,当我单击复选框时,它将返回默认值。为什么会发生这种情况Javascript 淘汰赛没有';t更改对象数组中的复选框状态,javascript,knockout.js,knockout-mapping-plugin,knockout-2.0,Javascript,Knockout.js,Knockout Mapping Plugin,Knockout 2.0,我正在使用对象数组创建复选框选择器,但由于某些原因,当我单击复选框时,它将返回默认值。为什么会发生这种情况 <html> <head> <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script> <script src="knockout-2.2.1.js"></script> <script src="knockout.mapping-lat
<html>
<head>
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="knockout-2.2.1.js"></script>
<script src="knockout.mapping-latest.js"></script>
</head>
<body>
<span data-bind="text: name"></span>
<ul data-bind="foreach: alldata">
<li>
Name at position <span data-bind="text: $index"> </span>:
<span data-bind="text: $data.name"> </span>
<input type="checkbox" data-bind="attr: { value: $data }, click: myFunction.bind($data),checked: $data.rc " />
</li>
</ul>
<hr />
<div data-bind="text: ko.toJSON(viewModel)"></div>
<script type="text/javascript">
var tObj = {"name":"John", "roles":[{id:1, name:"Role1", desc:"Desc1"}, {id:2, name:"Role2", desc:"Desc2"}]};
var lstRoles=[{id:1, name:"Role1", desc:"Desc1", rc:true},{id:2, name:"Role2", desc:"Desc2", rc:false},{id:2, name:"Role3", desc:"Desc3",rc:true},{id:2, name:"Role4", desc:"Desc4", rc:false}];
var viewModel = ko.mapping.fromJS(tObj);
viewModel.alldata = ko.observableArray(lstRoles);
//viewModel.alldata.subscribe();
ko.applyBindings(viewModel);
function myFunction(data)
{
//viewModel.roles.push(data);
}
</script>
</body>
</html>
-
职位名称:
var tObj={“name”:“John”,“roles”:[{id:1,name:“Role1”,desc:“Desc1”},{id:2,name:“Role2”,desc:“Desc2”}]};
var lstRoles=[{id:1,名称:“Role1”,desc:Desc1,rc:true},{id:2,名称:“Role2”,desc:Desc2,rc:false},{id:2,名称:“Role3”,desc:Desc3,rc:true},{id:2,名称:“Role4”,desc:Desc4,rc:false}];
var viewModel=ko.mapping.fromJS(tObj);
viewModel.alldata=ko.observearray(lstRoles);
//viewModel.alldata.subscribe();
应用绑定(视图模型);
函数myFunction(数据)
{
//viewModel.roles.push(数据);
}
更新代码:
我已经创建了问题的1部分,它与click:myFunction.bind($data)事件相关,如果删除click事件,它将开始工作。但仅适用于tObj.Roles,而不适用于alldata数组
<html>
<head>
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="knockout-2.2.1.js"></script>
<script src="knockout.mapping-latest.js"></script>
</head>
<body>
<span data-bind="text: name"></span>
<div data-bind="foreach: alldata">
<input type="checkbox" data-bind="attr: { value: $data }, checked: $data.rc, enable: $data.ds" />
<span data-bind="text: $data.name"> </span>
<span data-bind="text: $data.desc"> </span></br>
</div>
<hr />
<div data-bind="foreach: roles">
<input type="checkbox" data-bind="attr: { value: $data }, checked: $data.rc" />
<span data-bind="text: $data.name"> </span>
<span data-bind="text: $data.desc"> </span></br>
</div>
<hr />
<div data-bind="text: ko.toJSON(viewModel)"></div>
<script type="text/javascript">
var tObj = {"name":"John", "roles":[{id:1, name:"Role1", desc:"Desc1", rc:true, ds:true},{id:2, name:"Role2", desc:"Desc2", rc:false, ds:false},{id:2, name:"Role3", desc:"Desc3",rc:true, ds:false},{id:2, name:"Role4", desc:"Desc4", rc:false, ds:true}]};
var lstRoles=[{id:1, name:"Role1", desc:"Desc1", rc:true, ds:true},{id:2, name:"Role2", desc:"Desc2", rc:false, ds:false},{id:2, name:"Role3", desc:"Desc3",rc:true, ds:false},{id:2, name:"Role4", desc:"Desc4", rc:false, ds:true}];
var viewModel = ko.mapping.fromJS(tObj);
viewModel.alldata = ko.observableArray(lstRoles);
//viewModel.alldata.subscribe();
ko.applyBindings(viewModel);
function myFunction(data)
{
//viewModel.roles.push(data);
}
</script>
</body>
</html>
var tObj={“name”:“John”,“roles”:[{id:1,name:“Role1”,desc:“Desc1”,rc:true,ds:true},{id:2,name:“Role2”,desc:“Desc2”,rc:false,ds:false},{id:2,name:“Role4”,ds:false},{id:2,name:“Role4”,rc:false,ds:true};
var lstRoles=[{id:1,名称:“Role1”,描述:“Desc1”,rc:true,ds:true},{id:2,名称:“Role2”,描述:“Desc2”,rc:false,ds:false},{id:2,名称:“Role3”,描述:“Desc3”,rc:true,ds:false},{id:2,名称:“Role4”,描述:“Desc4”,rc:false,ds:true}];
var viewModel=ko.mapping.fromJS(tObj);
viewModel.alldata=ko.observearray(lstRoles);
//viewModel.alldata.subscribe();
应用绑定(视图模型);
函数myFunction(数据)
{
//viewModel.roles.push(数据);
}
似乎合理,它与默认的点击操作相连接,即复选框值更改。尝试使用returntrue;单击处理程序。lstRoles
不是“JSON数组”。它只是一个数组。您发布的代码中没有JSON。谢谢,我已经修复了语法问题,但实际上您让问题变得更糟;)我将修复它(,它们只是对象)。我已经找到了问题的1部分,它与click:myFunction.bind($data)事件相关,如果删除click事件,它将开始工作。但仅适用于tObj.Roles,而不适用于alldata数组。