Knockout.Js官网学习(模版绑定)
模板绑定器
如今页面结构越来越复杂,仅仅依靠foreach已经不足以我们的使用,这个时候我们就需要模板的存在,模板的优点自然很多,首先会让页面整洁,同时修改起来也可以方面的定位,最重要的是ko可以条件式选择模板来呈现数据。下面我们将开始逐一的学习。
1.呈现一个简单的模板
常规的js我们需要写上去,如下所示:

1 <script type="text/javascript">
2 $(function () {
3 var viewMode = {
4 datas: ko.observableArray({name:"123",value:123})
5 };
6 ko.applyBindings(viewMode);
7 });
8 </script>

然后我们在指定我们的模板:

1 <script type="text/html" id="data-template" >
2 <div data-bind="text:name" ></div>
3 <div data-bind="text:value" ></div>
4 </script>

最后我们在页面中使用这个模板:
<div data-bind="template: {name:'data-template',data:datas}" ></div>
其中template就是我们今天的主角,name用来指定使用的模板名字,data是指定用来呈现的数据,然后我们在浏览器中查看。
2.利用”foreach”选项呈现模板
上面的方法只能用来呈现一条数据的,但是大多数实际应用中我们都需要按照一个模板循环呈现数据,那么我们就需要使用foreach选项。
首先我们先修改js,改成数组:

1 <script type="text/javascript">
2 $(function () {
3 var viewMode = {
4 datas: ko.observableArray([{ name: "123", value: 123 }, { name: "456", value: 456 }])
5 };
6 ko.applyBindings(viewMode);
7 });
8 </script>

然后将上面的data改成foreach就可以,刷新页面,我们就可以看到结果了。
3.利用”as”重命名
这个选项在一般情况下我们不会使用,除非我们需要在模板中使用子模板的时候,这个as选项就非常有用,通过下面的例子我们看出具体的用法在哪:

1 <div data-bind="template: {name:'data-template',foreach:datas,as:'t'}" ></div>
2
3 <script type="text/html" id="data-template" >
4 <div data-bind="text: name" ></div>
5 <div data-bind="template: {name:'value-template',foreach:value}" ></div>
6 </script>
7
8 <script type="text/html" id="value-template">
9 <div data-bind="text:t.name" ></div>
10 <div data-bind="text:$data" ></div>
11 </script>
12
13 <script type="text/javascript">
14 $(function () {
15 var viewMode = {
16 datas: ko.observableArray([{ name: "123", value: [1, 2, 3, ] }, { name: "456", value: [4, 5, 6] }])
17 };
18
19 ko.applyBindings(viewMode);
20 });
21 </script>

我们定义了两个模板,分别为”data-template”和”value-template”,而”data-template”中又使用了”value-template”模板,”value-template”模板中使用t.name来访问上级的name其中t就是as的作用。
4.使用”afterRender”,”afterAdd”和”beforeRemove”事件
这几个事件就是用来在呈现模板的过程中响应不同的事件,并且还会传递对应的参数。下面我们改变上面的示例,响应afterRender事件,并输出对应的name,首先我们在data-bind中添加afterRender:
<div data-bind="template: { name: 'data-template', foreach: datas, as: 't', afterRender: onRender }" ></div>
然后在js中添加一个函数:

1 <script type="text/javascript">
2 $(function () {
3 var viewMode = {
4 datas: ko.observableArray([{ name: "123", value: [1, 2, 3, ] }, { name: "456", value: [4, 5, 6] }]),
5 onRender:function(ele,arg){
6 console.log(arg.name);
7 }
8 };
9
10 ko.applyBindings(viewMode);
11 });
12 </script>

5.动态选择模板
我们一开始也说了使用模板的另一个最大的好处就是可以动态的选择呈现的模板,这样对于某些外观差距很大,但是都属于同一个数据的情况下可以利用这个来实现,其实实现起来也很简单,我们只要在指定name的时候指定一个函数就可以,在呈现每个数据的时候会回调这个函数,并把当前的数据作为参数传递进来,然后我们就可以根据数据的具体情况来返回对应的模板名称了,比如下面的示例代码:

1 <div data-bind="template: { name: templateName, foreach: datas}" ></div>
2
3 <script type="text/html" id="data-template" >
4 <div>A</div>
5 <div data-bind="text: name" ></div>
6 </script>
7
8 <script type="text/html" id="value-template">
9 <div>B</div>
10 <div data-bind="text:name" ></div>
11 </script>
12
13 <script type="text/javascript">
14 $(function () {
15 var viewMode = {
16 datas: ko.observableArray([{ name: "123", value: [1, 2, 3, ] }, { name: "456", value: [4, 5, 6] }]),
17 templateName: function (ele) {
18 if (ele.name == "123") {
19 return "data-template";
20 } else {
21 return "value-template";
22 }
23 }
24 };
25
26 ko.applyBindings(viewMode);
27 });
28 </script>

最后我们可以看到会按照我们的条件来输出不同的模板了。
Knockout.Js官网学习(模版绑定)的更多相关文章
- Knockout.Js官网学习(系列)
1.Knockout.Js官网学习(简介) 2.Knockout.Js官网学习(监控属性Observables) Knockout.Js官网学习(数组observable) 3.Knockout.Js ...
- Knockout.Js官网学习(创建自定义绑定)
前言 你可以创建自己的自定义绑定 – 没有必要非要使用内嵌的绑定(像click,value等).你可以你封装复杂的逻辑或行为,自定义很容易使用和重用的绑定.例如,你可以在form表单里自定义像grid ...
- Knockout.Js官网学习(简介)
前言 最近一段时间在网上经常看到关于Knockout.js文章,于是自己就到官网看了下,不过是英文的,自己果断搞不来,借用google翻译了一下.然后刚刚发现在建立asp.net mvc4.0的应用程 ...
- Knockout.Js官网学习(value绑定)
前言 value绑定是关联DOM元素的值到view model的属性上.主要是用在表单控件<input>,<select>和<textarea>上. 当用户编辑表单 ...
- Knockout.Js官网学习(event绑定、submit绑定)
event绑定 event绑定在DOM元素上添加指定的事件句柄以便元素被触发的时候执行定义的JavaScript 函数.大部分情况下是用在keypress,mouseover和mouseout上. 简 ...
- Knockout.Js官网学习(click绑定)
前言 click绑定在DOM元素上添加事件句柄以便元素被点击的时候执行定义的JavaScript 函数.大部分是用在button,input和连接a上,但是可以在任意元素上使用. 简单示例 <h ...
- Knockout.Js官网学习(text绑定)
前言 text 绑定到DOM元素上,使得该元素显示的文本值为你绑定的参数.该绑定在显示<span>或者<em>上非常有用,但是你可以用在任何元素上. 简单绑定 Today's ...
- Knockout.Js官网学习(selectedOptions绑定、uniqueName 绑定)
selectedOptions绑定 selectedOptions绑定用于控制multi-select列表已经被选择的元素,用在使用options绑定的<select>元素上. 当用户在m ...
- Knockout.Js官网学习(style绑定、attr绑定)
Style绑定 style绑定是添加或删除一个或多个DOM元素上的style值.比如当数字变成负数时高亮显示,或者根据数字显示对应宽度的Bar.(注:如果你不是应用style值而是应用CSS clas ...
随机推荐
- Spss22安装与破解步骤
Spss22安装与破解教程 向师姐请教了一些学术问题,哈哈说的有点大,不过真的很感谢,学到了很多,少走了很多弯路. 1.下载安装包 可以去IBM官网.人大论坛等网站下载,全部文件应包括spss22安装 ...
- ubuntu下访问其他盘出现挂在错误解决办法
Error mounting /dev/sda5 at /media Linux下不能进入windows的NTFS分区之挂载错误问题 电 脑安装了win8,后在另一个分区(在win8下未分配空间)安装 ...
- opencv图片右转函数
因为需要将函数进行右转,发现opencv自带 的过于麻烦.自己写了个右转的.可以根据这个想法写出任何方向的 //函数功能,右转图片 IplImage* convertImage(IplImage* i ...
- P1171 售货员的难题
P1171 售货员的难题 题目描述 某乡有nn个村庄(1<n \le 201<n≤20),有一个售货员,他要到各个村庄去售货,各村庄之间的路程s(0<s<1000)s(0< ...
- C#实现执行数据库事务案例
我是实际项目来拆出来做的案例,场景是比如我们在做电商网站时,在创建订单时的一系列操作,通常在创建订单时我们需要数据表的操作有:订单的表头(主表).订单的详细.清空购物车.甚至是修改优惠劵的状态(在使用 ...
- PHP里echo print print_r的区别
echo ,print的区别在于echo 可以输出多个变量值,而print只有一个变量,做为一个字符串输出. 另一点区别在于echo 没有返回值,print有返回值1.print不能输出数组和对象. ...
- 数据结构编程实验——chapter10-应用经典二叉树编程
二叉树不仅结构简单.节省内存,更重要是是这种结构有利于对数据的二分处理.之前我们提过,在二叉树的基础上能够派生很多经典的数据结构,也是下面我们将进行讨论的知识点: (1) 提高数据查找效率的二叉排 ...
- 一个highcharts混合图Demo
公司要我做一个highcharts的mockup,其实半个小时就能做完了,我做了将近两个小时,唉!不过还好,总算把东西学会了.勤能补拙! 把代码贴上来 布局很简单,一个div里套两个div,给好id, ...
- asp.net后台操作javascript:confirm返回值
在asp.net中使用confirm可以分为两种: 1.没有使用ajax,confirm会引起也面刷新 2.使用了ajax,不会刷新 A.没有使用ajax,可以用StringBuilder来完成. ( ...
- C语言入门教程-(1)简介及搭建环境
1.谁适合阅读本教程 本教程可以帮助大家从零开始学习C语言,对于有一定基础的人起到夯实基本功的作用.C语言容易学习,非常适合初学者入门,而且也为以后的编程打下基础.借用一句话:“要进入编程行业高手必学 ...