62,046
社区成员
发帖
与我相关
我的任务
分享
<div data-bind="template:{name: MyTemplateLoader('paper_editor'), data: paper1}"></div>
........
<div data-bind="template:{name: MyTemplateLoader('paper_editor'), data: paper2}"></div>
........
........
<div data-bind="template:{name: MyTemplateLoader('paper_editor'), data: paper3}"></div>
........
........
<div data-bind="template:{name: MyTemplateLoader('paper_editor'), data: paper4}"></div>
这样模板就是模块化的、分层的、复用的、延迟从服务器加载的。运行时同一个模板知道根据4个文案的各自的数据 ViewModel 而绑定展开内容。
也许稍微费点理解,但是界面搭建和变化时会变得非常自由。
<!-- ko if: 单选 -->
<div data-bind="template:{name:' template1'}"></div>
<!-- /ko -->
<!-- ko ifnot: 单选 -->
<div data-bind="template:{name:' template2'}"></div>
<!-- /ko -->
这样,当单选和多选切换时,使用不同的模板,它们都可以针对同一套 ViewModel 来绑定,但是运行时及时出现不同画面。这样你在单选中可以使用“导航栏”,也可以使用“按钮组”,或者其它更灵活的形式。不是说要把单选跟多选弄成极其容易混淆的同一个模板。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<style>
table {
width: 100%;
margin-top: 3px;
}
</style>
</head>
<body>
<table style="border:1px solid #000000">
<tbody>
@*绑定列表1*@
<tr>
<td style="width:100px">驾照类型</td>
<td data-bind="foreach:DataList1">
<label>
<input type="checkbox" data-bind="checked:select,visible:$root.DataList1Multiselect " />
<!-- ko text:title --><!-- /ko-->
</label>
</td>
<td style="width:100px">
<label><input type="checkbox" data-bind="checked:DataList1Multiselect" />多选</label>
</td>
</tr>
</tbody>
</table>
<table style="border:1px solid #000000">
<tbody>
@*绑定列表2*@
<tr>
<td style="width:100px">价格区间</td>
<td data-bind="foreach:DataList2">
<label>
<input type="checkbox" data-bind="checked:select,visible:$root.DataList2Multiselect" />
<!-- ko text:title --><!-- /ko-->
</label>
</td>
<td style="width:100px">
<label><input type="checkbox" data-bind="checked:DataList2Multiselect" />多选</label>
</td>
</tr>
</tbody>
</table>
<table style="border:1px solid #000000">
<tbody>
@*绑定列表3*@
<tr>
<td style="width:100px">驾照类型</td>
<td data-bind="foreach:DataList3">
<label>
<input type="checkbox" data-bind="checked:select,visible:$root.DataList3Multiselect" />
<!-- ko text:title --><!-- /ko-->
</label>
</td>
<td style="width:100px">
<label><input type="checkbox" data-bind="checked:DataList3Multiselect" />多选</label>
</td>
</tr>
</tbody>
</table>
<button data-bind="click:function(){$root.ShowSelectValues()}">显示所选值</button><br />
<label>所选的值是:</label><br />
<div style="width:100%;" data-bind="html:$root.SelectValues"></div>
</body>
</html>
<script src="~/Scripts/knockout-3.4.2.js"></script>
<script>
function Model() {
var model = this;
model.DataList1 = ko.observableArray([]);//定义列表1
model.DataList2 = ko.observableArray([]);//定义列表2
model.DataList3 = ko.observableArray([]);//定义列表3
model.DataList1Multiselect = ko.observable(false);//列表1 是否开启多选开关(默认false)
model.DataList2Multiselect = ko.observable(false);//列表2 是否开启多选开关(默认false)
model.DataList3Multiselect = ko.observable(false);//列表3 是否开启多选开关(默认false)
//加载数据函数
model.LoadData = function () {
//这里你可以从服务端读取数据,然后赋值给具体的列表(这里我们手动添加几条)
//初始化数据列表1的数据源
model.DataList1.push({ title: "全部", id: 11, select: false });//title:名称,select属性表示是否选中的该数据(下同)
model.DataList1.push({ title: "测试12", id: 12, select: false });
model.DataList1.push({ title: "测试13", id: 13, select: false });
model.DataList1.push({ title: "测试14", id: 14, select: false });
//初始化数据列表2的数据源
model.DataList2.push({ title: "全部", id: 21, select: false });//title:名称,select属性表示是否选中的该数据(下同)
model.DataList2.push({ title: "测试22", id: 22, select: false });
model.DataList2.push({ title: "测试23", id: 23, select: false });
model.DataList2.push({ title: "测试24", id: 24, select: false });
//初始化数据列表3的数据源
model.DataList3.push({ title: "全部", id: 31, select: false });//title:名称,select属性表示是否选中的该数据(下同)
model.DataList3.push({ title: "测试32", id: 32, select: false });
model.DataList3.push({ title: "测试33", id: 33, select: false });
model.DataList3.push({ title: "测试34", id: 34, select: false });
}
model.SelectValues = ko.observable("");
model.ShowSelectValues = function () {
var jsonString = "";
for (var i = 0; i < model.DataList1().length; i++) {
var item = model.DataList1()[i];
if (item.select)
jsonString += (item.title + ',')
}
for (var i = 0; i < model.DataList2().length; i++) {
var item = model.DataList2()[i];
if (item.select)
jsonString += (item.title + ',')
} for (var i = 0; i < model.DataList3().length; i++) {
var item = model.DataList3()[i];
if (item.select)
jsonString += (item.title + ',')
}
model.SelectValues(jsonString);
}
}
window.onload = function () {
//实例化模型
var model = new Model();
//加载模型数据
model.LoadData();
//绑定到页面上,main为html元素id
ko.applyBindings(model, document.getElementById("main"));
}
</script>