1、效果图

2、代码

<!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>

参考资料