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 轻松支持函数重载 (Part 1 - 设计)
Aug 04 Javascript
javascript 面向对象全新理练之继承与多态
Dec 03 Javascript
jQuery内置的AJAX功能和JSON的使用实例
Jul 27 Javascript
用AngularJS的指令实现tabs切换效果
Aug 31 Javascript
微信小程序 input输入框控件详解及实例(多种示例)
Dec 14 Javascript
bootstrap输入框组件使用方法详解
Jan 19 Javascript
Vue.2.0.5实现Class 与 Style 绑定的实例
Jun 20 Javascript
在 Typescript 中使用可被复用的 Vue Mixin功能
Apr 17 Javascript
vue webpack开发访问后台接口全局配置的方法
Sep 18 Javascript
微信小程序网络请求实现过程解析
Nov 06 Javascript
详解vue或uni-app的跨域问题解决方案
Feb 21 Javascript
记一次vue跨域的解决
Oct 21 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/10/07 PHP
深入for,while,foreach遍历时间比较的详解
2013/06/08 PHP
PHP巧妙利用位运算实现网站权限管理的方法
2017/03/12 PHP
JQuery slideshow的一个小问题(如何发现及解决过程)
2013/02/06 Javascript
使用 js+正则表达式为关键词添加链接
2014/11/11 Javascript
js完美实现@提到好友特效(兼容各大浏览器)
2015/03/16 Javascript
JavaScript将字符串转换成字符编码列表的方法
2015/03/19 Javascript
Bootstrap每天必学之导航条
2015/11/27 Javascript
详解JavaScript中this关键字的用法
2016/05/26 Javascript
canvas快速绘制圆形、三角形、矩形、多边形方法介绍
2016/12/29 Javascript
Vue.js实战之使用Vuex + axios发送请求详解
2017/04/04 Javascript
利用C/C++编写node.js原生模块的方法教程
2017/07/07 Javascript
微信小程序js文件改变参数并在视图上及时更新【推荐】
2018/06/11 Javascript
vue写h5页面的方法总结
2019/02/12 Javascript
Vue实例的对象参数options的几个常用选项详解
2019/11/08 Javascript
[04:20]DOTA2-DPC中国联赛 正赛 VG vs LBZS 选手采访 1月19日
2021/03/11 DOTA
Python获取当前时间的方法
2014/01/14 Python
在Python中操作字符串之startswith()方法的使用
2015/05/20 Python
python生成词云的实现方法(推荐)
2017/06/13 Python
python 简单搭建阻塞式单进程,多进程,多线程服务的实例
2017/11/01 Python
python2与python3中关于对NaN类型数据的判断和转换方法
2018/10/30 Python
Pycharm 设置默认头的图文教程
2019/01/17 Python
python实现转盘效果 python实现轮盘抽奖游戏
2019/01/22 Python
基于Python的图像数据增强Data Augmentation解析
2019/08/13 Python
python给图像加上mask,并提取mask区域实例
2020/01/19 Python
Python开发入门——迭代的基本使用
2020/09/03 Python
Python 内存管理机制全面分析
2021/01/16 Python
纯CSS3大转盘抽奖示例代码(响应式、可配置)
2017/01/13 HTML / CSS
香港彩色隐形眼镜在线商店:Stunninglens(全球免费送货)
2019/05/10 全球购物
Ray-Ban雷朋太阳眼镜英国官网:Ray-Ban UK
2019/11/23 全球购物
介绍JAVA 中的Collection FrameWork(及如何写自己的数据结构)
2014/10/31 面试题
体育专业学生自我评价范文
2014/01/17 职场文书
绘画专业自荐信范文
2014/02/23 职场文书
三年级学生评语
2014/04/23 职场文书
安全技术说明书
2014/05/09 职场文书
2016年小学生清明节广播稿
2015/12/17 职场文书