<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js" type="text/javascript"></script>
<script src="http://apps.bdimg.com/libs/knockout.js/3.1.0/knockout.js" type="text/javascript"></script>
<style>
.item-list {
width: 800px;
margin: 0 auto;
}
.item {
margin: 20px auto;
border: 1px solid #ccc;
padding: 20px;
}
</style>
</head>
<body>
<div class="item-list">
<h2>ko 可编辑列表</h2>
<div data-bind="foreach: userList">
<div class="item">
<span>姓名:</span><input type="text" data-bind="value: name"/> <br>
<span>年龄:</span><input type="text" data-bind="value: age"/> <br>
<span>性别:</span>
<label><input type="radio" data-bind="checked: gender, attr: {name: $index}" value="男"/>男</label>
<label><input type="radio" data-bind="checked: gender, attr: {name: $index}" value="女"/>女</label>
<br>
<span>爱好:</span>
<span data-bind="foreach: $parent.allHobbies">
<label>
<input type="checkbox" data-bind="checked: $parent.hobbies, value: $data"/>
<span data-bind="text: $data"></span>
</label>
</span>
<br>
<span>地址:</span><input type="text" data-bind="value: address"/>
<button data-bind="click: $parent.removeUser">删除</button>
</div>
</div>
<button data-bind="click: addUser">新增</button>
<button data-bind="click: toJSONString, enable: userList().length > 0">序列化</button>
<br>
<textarea id="jsonResult" cols="60" rows="5" disabled></textarea>
</div>
<script type="text/javascript">
var User = function (name, age, gender, hobbies, address) {
this.name = name;
this.age = age;
this.gender = gender;
this.hobbies = hobbies;
this.address = address;
};
var UserModel = function (userList) {
var self = this;
self.allHobbies = ['篮球', '足球', '羽毛球', '排球'];
self.userList = ko.observableArray(userList);
self.addUser = function () {
self.userList.push({
name: '',
age: '',
gender: '男',
hobbies: ko.observableArray([]),
address: ''
});
};
self.removeUser = function (user) {
self.userList.remove(user);
};
self.toJSONString = function () {
var json = JSON.stringify(ko.toJS(self.userList), null, 2);
$('#jsonResult').text(json);
};
};
var initData = [
new User('张三', 20, '男', ['足球,篮球'], '上海'),
new User('李四', 30, '女', ['排球,篮球'], '北京')
];
ko.applyBindings(new UserModel(initData));
</script>
</body>
</html>