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 相关文章推荐
修改发贴的编辑功能
Mar 07 Javascript
JQuery+CSS提示框实现思路及代码(纯手工打造)
May 07 Javascript
jquery的flexigrid无法显示数据提示获取到数据
Jul 19 Javascript
jQuery实现的网页竖向菜单效果代码
Aug 26 Javascript
JavaScript实现仿新浪微博大厅和腾讯微博首页滚动特效源码
Sep 15 Javascript
Javascript验证方法大全
Sep 21 Javascript
浅谈JavaScript中变量和函数声明的提升
Aug 09 Javascript
jQuery初级教程之网站品牌列表效果
Aug 02 jQuery
Angular2+国际化方案(ngx-translate)的示例代码
Aug 23 Javascript
jQuery轮播图实例详解
Aug 15 jQuery
如何使用Node.js爬取任意网页资源并输出PDF文件到本地
Jun 17 Javascript
npm qs模块使用详解
Feb 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书写安全的脚本代码
2012/02/05 PHP
注意:php5.4删除了session_unregister函数
2013/08/05 PHP
php中convert_uuencode()与convert_uuencode函数用法实例
2014/11/22 PHP
php下载文件,添加响应头的简单实例
2016/09/22 PHP
PHP获取对象属性的三种方法实例分析
2019/01/03 PHP
PHP lcfirst()函数定义与用法
2019/03/08 PHP
Thinkphp5.0 框架Model模型简单用法分析
2019/10/11 PHP
JavaScript延迟加载
2021/03/09 Javascript
asp.net下使用jquery 的ajax+WebService+json 实现无刷新取后台值的实现代码
2010/09/19 Javascript
JavaScript函数详解
2014/11/17 Javascript
node.js中的fs.linkSync方法使用说明
2014/12/15 Javascript
EasyUi中的Combogrid 实现分页和动态搜索远程数据
2016/04/01 Javascript
基于jQuery实现淡入淡出效果轮播图
2020/07/31 Javascript
微信JS-SDK自定义分享功能实例详解【分享给朋友/分享到朋友圈】
2016/11/25 Javascript
AngularJS实现表格的增删改查(仅限前端)
2017/07/04 Javascript
Vue中的slot使用插槽分发内容的方法
2018/03/01 Javascript
Vue.js 表单控件操作小结
2018/03/29 Javascript
原生JS实现$.param() 函数的方法
2018/08/10 Javascript
angular ng-model 无法获取值的处理方法
2018/10/02 Javascript
Vue中使用canvas方法总结
2019/02/12 Javascript
详解JS浏览器事件循环机制
2019/03/27 Javascript
在Python中使用第三方模块的教程
2015/04/27 Python
Python实现数据库并行读取和写入实例
2017/06/09 Python
Python异常处理操作实例详解
2018/08/28 Python
对Python的多进程锁的使用方法详解
2019/02/18 Python
树莓派用python中的OpenCV输出USB摄像头画面
2019/06/22 Python
Python使用内置函数setattr设置对象的属性值
2020/10/16 Python
北美三大旅游网站之一:Travelocity加拿大
2016/08/20 全球购物
Zavvi荷兰:英国大型音像制品和图书游戏零售商
2018/03/22 全球购物
北美个性化礼品商店:Things Remembered
2018/06/12 全球购物
工会主席事迹材料
2014/06/03 职场文书
2015年度学校应急管理工作总结
2015/10/22 职场文书
离婚协议书范文2016
2016/03/18 职场文书
eclipse创建项目没有dynamic web的解决方法
2021/06/24 Java/Android
webpack的移动端适配方案小结
2021/07/25 Javascript
IDEA 2022 Translation 未知错误 翻译文档失败
2022/04/24 Java/Android