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 相关文章推荐
js特效,页面下雪的小例子
Jun 17 Javascript
使用JS取得焦点(focus)元素代码
Mar 22 Javascript
JQuery使用$.ajax和checkbox实现下次不在通知功能
Apr 16 Javascript
JS+CSS实现DIV层的展开、收缩效果
Jan 28 Javascript
ionic由于使用了header和subheader导致被遮挡的问题的两种解决方法
Sep 22 Javascript
微信小程序 倒计时组件实现代码
Oct 24 Javascript
JS 全屏和退出全屏详解及实例代码
Nov 07 Javascript
微信小程序 switch组件详解及简单实例
Jan 10 Javascript
vue写一个组件
Apr 09 Javascript
vue中关闭eslint的方法分析
Aug 04 Javascript
vue+element+Java实现批量删除功能
Apr 08 Javascript
ES6 Object方法扩展的应用实例分析
Jun 25 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 调用远程url的六种方法小结
2009/11/02 PHP
PHP数组循环操作详细介绍 附实例代码
2013/02/03 PHP
PHP实现的简单三角形、矩形周长面积计算器分享
2014/11/18 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
2017/07/19 PHP
php表单处理操作
2017/11/16 PHP
JQuery 无废话系列教程(二) jquery实战篇上
2009/06/23 Javascript
javascript 写类方式之六
2009/07/05 Javascript
js 第二代身份证号码的验证机制代码
2011/05/12 Javascript
AngularJS入门教程之Hello World!
2014/12/06 Javascript
JSON格式的键盘编码对照表
2015/01/29 Javascript
在easyUI开发中,出现jquery.easyui.min.js函数库问题的解决办法
2015/09/11 Javascript
jquery获取url参数及url加参数的方法
2015/10/26 Javascript
Node.js+Express配置入门教程
2016/05/19 Javascript
JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)
2016/12/14 Javascript
JavaScript mixin实现多继承的方法详解
2017/03/30 Javascript
Angular.js 4.x中表单Template-Driven Forms详解
2017/04/25 Javascript
JS中的BOM应用
2018/02/02 Javascript
JS中实现隐藏部分姓名或者电话号码的代码
2018/07/17 Javascript
vue通过数据过滤实现表格合并
2020/11/30 Javascript
深入理解javascript中的this
2021/02/08 Javascript
Python中将字典转换为列表的方法
2016/09/21 Python
浅谈Python的垃圾回收机制
2016/12/17 Python
Python django使用多进程连接mysql错误的解决方法
2018/10/08 Python
Django中的ajax请求
2018/10/19 Python
Python socket聊天脚本代码实例
2020/01/02 Python
佛罗里达州印第安河新鲜水果:Hale Groves
2017/02/20 全球购物
新西兰最大的品牌运动鞋购物网站:Platypus NZ
2017/10/27 全球购物
改变生活的男士内衣:SAXX Underwear
2019/08/28 全球购物
美国在线家具网站:GDFStudio
2021/03/13 全球购物
简述索引存取方法的作用和建立索引的原则
2013/03/26 面试题
解释一下钝化(Swap out)
2016/12/26 面试题
师范应届生语文教师求职信
2013/10/29 职场文书
晚归检讨书
2014/02/19 职场文书
机电一体化专业毕业生自荐信
2014/06/19 职场文书
大学毕业典礼演讲稿
2014/09/09 职场文书
群众路线剖析材料(四风)
2014/11/05 职场文书