JsRender for index循环索引用法详解


Posted in Javascript onOctober 31, 2014

本文实例讲述了JsRender for index循环索引用。分享给大家供大家参考。具体分析如下:

JsRedner和JsViews(JsViews是再JsRender基础上的进一步封装)被称为下一代的Jquery模板,官方地址:
https://github.com/BorisMoore/jsrender;
https://github.com/BorisMoore/jsviews。

循环是模版引擎必不可少的一部分,而说起循环,会引出一个至关重要的因素:索引。

所谓索引,即循环次数,通过索引,可以获取当前循环是第几次。

如果读者阅读过官方文档,会见到如下获取索引的方式:

data:

{

   names: ["Maradona","Pele","Ronaldo","Messi"]

}

template markup:
{{for names}}

   <div>

     <b>{{: #index+1}}.</b>

     <span>{{: #data}}</span>

   </div>

 {{/for}}

result:

1. Maradona

 2. Pele

 3. Ronaldo

 4. Messi

索引可以在循环中通过特殊字面量#index获取,特殊字面量#data相当于this,在本例中表示每一个name。

接下来我们搞点小花样,还是上边的例子,只不过这次我希望只显示以M开头的名字:

data:

{

   names: ["Maradona","Pele","Ronaldo","Messi"]

 }

template markup:
{{for names}}

   {{if #data.indexOf("M") == 0}}

     <div>

       <b>{{: #index+1}}.</b>

       <span>{{: #data}}</span>

     </div>

   {{/if}}

 {{/for}}

result:

Unavailable (nested view): use #getIndex()1. Maradona

 Unavailable (nested view): use #getIndex()1. Messi

简单加了个if判断,竟然报错了!

问题就出在#index上,错误提示很明确,让你用#getIndex()代替#index。

试试替换后的代码:

data:

{

   names: ["Maradona","Pele","Ronaldo","Messi"]

 }

template markup:
{{for names}}

   {{if #data.indexOf("M") == 0}}

     <div>

       <b>{{: #getIndex()+1}}.</b>

       <span>{{: #data}}</span>

     </div>

   {{/if}}

 {{/for}}

result:

1. Maradona

 4. Messi

这是为什么呢?简单说,就是因为{{if }}虽然不创建常规数据作用域,但却干扰了隐藏作用域。也就是说,{{if }}不会阻断常规数据(你传入的数据)的可见性,但会干扰隐藏数据(#index、#parent)的可见性。这样简单理解就可以了,不必深究,因为这仅仅是此框架的缺陷,并不是标准。

因此,本文给读者一个很重要的结论:尽量使用#getIndex()获取索引,避免使用#index,除非你的应用足够简单。

希望本文所述对大家JsRender的学习有所帮助。

Javascript 相关文章推荐
用javascript实现的支持lrc歌词的播放器
May 17 Javascript
单击按钮显示隐藏子菜单经典案例
Jan 04 Javascript
LABjs、RequireJS、SeaJS的区别
Mar 04 Javascript
多个checkbox被选中时如何判断是否有自己想要的
Sep 22 Javascript
零基础搭建Node.js、Express、Ejs、Mongodb服务器及应用开发入门
Dec 20 Javascript
多种JQuery循环滚动文字图片效果代码
Jun 23 Javascript
vue.js学习笔记之绑定style样式和class列表
Oct 31 Javascript
浅谈jQuery before和insertBefore的区别
Dec 04 Javascript
EasyUI修改DateBox和DateTimeBox的默认日期格式示例
Jan 18 Javascript
微信小程序 密码输入(源码下载)
Jun 27 Javascript
node作为中间服务层如何发送请求(发送请求的实现方法详解)
Jan 02 Javascript
javascript写一个ajax自动拦截并下载数据代码实例
Sep 07 Javascript
javascript常用函数归纳整理
Oct 31 #Javascript
让html页面不缓存js的实现方法
Oct 31 #Javascript
js读取cookie方法总结
Oct 31 #Javascript
jQuery获取对象简单实现方法小结
Oct 30 #Javascript
js 通过cookie实现刷新不变化树形菜单
Oct 30 #Javascript
判断字符串的长度(优化版)中文占两个字符
Oct 30 #Javascript
javascript根据时间生成m位随机数最大13位
Oct 30 #Javascript
You might like
PHP+AJAX实现无刷新注册(带用户名实时检测)
2007/01/02 PHP
php使用ZipArchive提示Fatal error: Class ZipArchive not found in的解决方法
2014/11/04 PHP
smarty模板引擎从php中获取数据的方法
2015/01/22 PHP
PHP中判断文件存在使用is_file还是file_exists?
2015/04/03 PHP
PHP计算日期相差天数实例分析
2016/02/23 PHP
PHP基于curl后台远程登录正方教务系统的方法
2016/10/14 PHP
php-beanstalkd消息队列类实例分享
2017/07/19 PHP
javascript function调用时的参数检测常用办法
2010/02/26 Javascript
用jquery模仿的a的title属性的例子
2014/10/22 Javascript
在Ubuntu系统上安装Node.JS的教程
2015/10/15 Javascript
jQuery语法小结(超实用)
2015/12/31 Javascript
vue中$set的使用(结合在实际应用中遇到的坑)
2018/07/10 Javascript
Vue实现调节窗口大小时触发事件动态调节更新组件尺寸的方法
2018/09/15 Javascript
代码整洁之道(重构)
2018/10/25 Javascript
ionic使用angularjs表单验证(模板验证)
2018/12/12 Javascript
微信小程序自定义单项选择器样式
2019/07/25 Javascript
[04:44]DOTA2西游记战队视频彩蛋流出 师徒开黑巧遇林书豪
2016/08/03 DOTA
Python去掉字符串中空格的方法
2014/03/11 Python
Python实现分割文件及合并文件的方法
2015/07/10 Python
详解 Python 与文件对象共事的实例
2017/09/11 Python
pycharm安装和首次使用教程
2018/08/27 Python
解决Pytorch 训练与测试时爆显存(out of memory)的问题
2019/08/20 Python
使用Python脚本从文件读取数据代码实例
2020/01/19 Python
Django 删除upload_to文件的步骤
2020/03/30 Python
pandas创建DataFrame的7种方法小结
2020/06/14 Python
美国著名的户外用品品牌:L.L.Bean
2018/01/05 全球购物
中国跨境在线时尚零售商:Bellelily
2018/04/06 全球购物
Armor Lux法国官方网站:水手服装、成衣和内衣
2020/05/26 全球购物
香港艺人陈冠希创办的潮流品牌:JUICESTORE
2021/03/04 全球购物
2014乡镇干部纪律作风整顿思想汇报
2014/09/13 职场文书
学校学期工作总结
2015/08/13 职场文书
2016应届毕业生实习心得体会
2015/10/09 职场文书
重温经典:乔布斯在斯坦福大学的毕业演讲(双语)
2019/08/26 职场文书
python基础之函数的定义和调用
2021/10/24 Python
python实现层次聚类的方法
2021/11/01 Python
ubuntu开机后ROS程序自启动问题
2022/12/24 Servers