我需要在UI上顯示來自獨立JSON數組(lstRoles)的所有複選框,並將選定複選框作爲結果數組映射到結果JSON對象(tObj)中的屬性角色。 但我不知道如何在正確的掃管笏中做到這一點(我剛開始學習Knockout)。如果結果JSON對象已經有一些數據,如何初始化複選框。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="template: { name: 'choiceTmpl', foreach: lstRoles },click: myFunction.bind($data)"></ul>
<ul data-bind="foreach: lstRoles">
<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) " />
<a href="#" data-bind="click: $parent.removePerson">Remove</a>
</li>
</ul>
<hr />
<div data-bind="text: ko.toJSON(viewModel)"></div>
<script id="choiceTmpl" type="text/html">
<li>
<input type="checkbox" data-bind="attr: { value: $data } " />
<span data-bind="text: $data.name"></span>
</li>
</script>
<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"},{id:2, name:"Role2", desc:"Desc2"},{id:2, name:"Role3", desc:"Desc3"},{id:2, name:"Role4", desc:"Desc4"}];
var viewModel = ko.mapping.fromJS(tObj);
viewModel.alldata = lstRoles;
ko.applyBindings(viewModel);
function myFunction(data)
{
viewModel.roles.push(data);
}
</script>
</body>
</html>
不知道你在這裏試圖實現什麼,但你的viewmodel和綁定看起來完全不合適。你綁定到viewModel,lstRoles沒有在視圖模型中定義。 myFunction不在你的viewModel中,你不能調用它。這裏是更新的小提琴http://jsfiddle.net/sujesharukil/jEyb9/ – 2013-03-22 13:33:17
謝謝。我已經添加了更新的代碼作爲答案,我會很樂意從您那裏獲得反饋。 – 2013-03-22 16:36:33