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 相关文章推荐
jquery实现在页面加载完毕后获取图片高度或宽度
Jun 16 Javascript
JavaScript将字符串转换成字符编码列表的方法
Mar 19 Javascript
JavaScript数据类型判定的总结笔记
Jul 31 Javascript
jquery实现漫天雪花飞舞的圣诞祝福雪花效果代码分享
Aug 20 Javascript
jQuery获取checkboxlist的value值的方法
Sep 27 Javascript
js判断空对象的实例(超简单)
Jul 26 Javascript
Javascript中常用的检测方法小结
Oct 08 Javascript
JavaScript队列、优先队列与循环队列
Nov 14 Javascript
JS产生随机数的用法小结
Dec 10 Javascript
vue-router之nuxt动态路由设置的两种方法小结
Sep 26 Javascript
layui实现checkbox的目录树tree的例子
Sep 12 Javascript
Vue深入理解插槽slot的使用
Aug 05 Vue.js
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生成及获取JSON文件的方法
2016/08/23 PHP
PHP实现的统计数据功能详解
2016/12/06 PHP
Yii2表单事件之Ajax提交实现方法
2017/05/04 PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
2017/11/16 PHP
PHP设计模式入门之状态模式原理与实现方法分析
2020/04/26 PHP
php输出形式实例整理
2020/05/05 PHP
ajax 文件上传应用简单实现
2009/03/03 Javascript
JQuery团队打造的javascript单元测试工具QUnit介绍
2010/02/26 Javascript
JQuery AJAX提交中文乱码的解决方案
2010/07/02 Javascript
基于OO的动画附加插件,可以实现弹跳、渐隐等动画效果 分享
2013/06/24 Javascript
B/S模式项目中常用的javascript汇总
2013/12/17 Javascript
Windows系统下Node.js的简单入门教程
2015/06/23 Javascript
JavaScript头像上传插件源码分享
2016/03/29 Javascript
JavaScript实现打开链接页面的方式汇总
2016/06/02 Javascript
AngularJS动态加载模块和依赖的方法分析
2016/11/08 Javascript
常见的浏览器Hack技巧整理
2017/06/29 Javascript
Three.js基础学习之场景对象
2017/09/27 Javascript
layui框架中layer父子页面交互的方法分析
2017/11/15 Javascript
JavaScript使用indexOf()实现数组去重的方法分析
2018/09/04 Javascript
在vue中更换字体,本地存储字体非引用在线字体库的方法
2018/09/28 Javascript
微信小程序点击保存图片到本机功能
2019/12/13 Javascript
js实现上传图片并显示图片名称
2019/12/18 Javascript
js实现扫雷源代码
2020/11/27 Javascript
[05:13]2018DOTA2亚洲邀请赛主赛事第二日战况回顾 LGD、VG双雄携手晋级
2018/04/05 DOTA
Django中实现点击图片链接强制直接下载的方法
2015/05/14 Python
Python中__init__.py文件的作用详解
2016/09/18 Python
Python编程在flask中模拟进行Restful的CRUD操作
2018/12/28 Python
Python实现的旋转数组功能算法示例
2019/02/23 Python
使用 python pyautogui实现鼠标键盘控制功能
2019/08/04 Python
Python 生成一个从0到n个数字的列表4种方法小结
2019/11/28 Python
Python文件操作函数用法实例详解
2019/12/24 Python
详解Python修复遥感影像条带的两种方式
2020/02/23 Python
HTML5本地存储和本地数据库实例详解
2017/09/05 HTML / CSS
盛大二次面试题
2016/11/18 面试题
教师岗位职责
2013/11/17 职场文书
mysql全面解析json/数组
2022/07/07 MySQL