3
我使用的是對象數組來創建複選框選擇器,但出於某種原因,當我單擊複選框時,它將返回默認值。爲什麼會發生?Knockout不會更改對象數組中的複選框狀態
<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>
更新後的代碼:如果myFunction.bind($數據)事件刪除點擊事件就開始工作: 我已經成立問題的第一部分,它被點擊相關。但只適用於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>
'lstRoles'不是「JSON數組」。這只是一個數組。您發佈的代碼中沒有JSON。 – 2013-03-22 09:25:54
謝謝,我解決了我的語法問題 – 2013-03-22 09:29:06
其實你做得更糟了;)我會修復它([那些不是JSON對象](http://benalman.com/news/2010/03/theres-no-such作爲一個JSON /),他們只是對象)。 – 2013-03-22 09:30:36