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事件模型代码
Jul 01 Javascript
js如何实现设计模式中的模板方法
Jul 23 Javascript
一个JavaScript变量声明的知识点
Oct 28 Javascript
js实现动画特效的文字链接鼠标悬停提示的方法
Mar 02 Javascript
Node.js实现Excel转JSON
Apr 24 Javascript
jqGrid用法汇总(全经典)
Jun 28 Javascript
angular 内存溢出的问题解决
Jul 12 Javascript
Bootstrap导航菜单点击后无法自动添加active的处理方法
Aug 10 Javascript
解决ie11 SCRIPT5011:不能执行已释放Script的代码问题
May 05 Javascript
在layui中对table中的数据进行判断(0、1)转换为提示信息的方法
Sep 28 Javascript
小程序表单认证布局及验证详解
Jun 19 Javascript
vue+高德地图实现地图搜索及点击定位操作
Sep 09 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
BBS(php &amp; mysql)完整版(七)
2006/10/09 PHP
php 多个submit提交表单 处理方法
2009/07/07 PHP
php中memcache 基本操作实例
2015/05/17 PHP
PHP处理CSV表格文件的常用操作方法总结
2016/07/01 PHP
详解php中curl返回false的解决办法
2019/03/18 PHP
JS中Location使用详解
2015/05/12 Javascript
js同源策略详解
2015/05/21 Javascript
Javascript中prototype的使用详解
2016/06/18 Javascript
NodeJs读取JSON文件格式化时的注意事项
2016/09/25 NodeJs
AngularJS实现动态编译添加到dom中的方法
2016/11/04 Javascript
微信小程序 input输入框控件详解及实例(多种示例)
2016/12/14 Javascript
canvas实现爱心和彩虹雨效果
2017/03/09 Javascript
require.js中的define函数详解
2017/07/10 Javascript
React+Webpack快速上手指南(小结)
2018/08/15 Javascript
jQuery中常用动画效果函数知识点整理
2018/08/19 jQuery
详解Vue的常用指令v-if, v-for, v-show,v-else, v-bind, v-on
2018/10/12 Javascript
jQuery 筛选器简单操作示例
2019/10/02 jQuery
vue中使用腾讯云Im的示例
2020/10/23 Javascript
[35:43]2018DOTA2亚洲邀请赛 4.1 小组赛B组 paiN vs Effect
2018/04/03 DOTA
Django添加favicon.ico图标的示例代码
2018/08/07 Python
python实现简单flappy bird
2018/12/24 Python
Python轻量级web框架bottle使用方法解析
2020/06/13 Python
Python 利用OpenCV给照片换底色的示例代码
2020/08/03 Python
Becextech新西兰:数码单反相机和手机在线商店
2018/04/27 全球购物
广州迈达威.net面试题目
2012/03/10 面试题
linux比较文件内容的命令是什么
2015/09/23 面试题
介绍一下grep命令的使用
2012/06/28 面试题
2014年计生标语
2014/06/23 职场文书
工商管理本科生求职信
2014/07/13 职场文书
群众路线教育实践活动学习笔记内容
2014/11/06 职场文书
本科毕业论文致谢词
2015/05/14 职场文书
五一放假通知怎么写
2015/08/18 职场文书
关于感恩的作文
2019/08/26 职场文书
python源码剖析之PyObject详解
2021/05/18 Python
为什么MySQL8新特性会修改自增主键属性
2022/04/18 MySQL
mybatis 获取更新记录的id
2022/05/20 Java/Android