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 21 Javascript
javascript 面向对象封装与继承
Nov 27 Javascript
js实现的后台左侧管理菜单代码
Sep 11 Javascript
AngularJS Bootstrap详细介绍及实例代码
Jul 28 Javascript
Vue.js实现文章评论和回复评论功能
May 30 Javascript
bootstrap fileinput组件整合Springmvc上传图片到本地磁盘
May 11 Javascript
node.js调用Chrome浏览器打开链接地址的方法
May 17 Javascript
angular将html代码输出为内容的实例
Sep 30 Javascript
vue中el-upload上传图片到七牛的示例代码
Oct 19 Javascript
node Buffer缓存区常见操作示例
May 04 Javascript
详解基于原生JS验证表单组件xy-form
Aug 20 Javascript
JS实现多选框的操作
Jun 24 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
用缓存实现静态页面的测试
2006/12/06 PHP
php 无限极分类
2008/03/27 PHP
PHP取二进制文件头快速判断文件类型的实现代码
2013/08/05 PHP
详解thinkphp中的volist标签
2018/01/15 PHP
laravel 字段格式化 modle 字段类型转换方法
2019/09/30 PHP
用jquery实现学校的校历(asp.net+jquery ui 1.72)
2010/01/01 Javascript
动态添加option及createElement使用示例
2014/01/26 Javascript
jQuery setTimeout传递字符串参数报错的解决方法
2014/06/09 Javascript
jQuery实现新消息在网页标题闪烁提示
2015/06/23 Javascript
学习JavaScript设计模式(继承)
2015/11/26 Javascript
js实现上传图片预览方法
2016/10/25 Javascript
JavaScript编写一个贪吃蛇游戏
2017/03/09 Javascript
Angular.JS中指令ng-if的注意事项小结
2017/06/21 Javascript
Windows安装Node.js报错:2503、2502的解决方法
2017/10/25 Javascript
vue-cli构建vue项目的步骤详解
2019/01/27 Javascript
nodejs使用node-xlsx生成excel的方法示例
2019/08/22 NodeJs
js canvas实现星空连线背景特效
2019/11/01 Javascript
javascript数组的定义及操作实例
2019/11/10 Javascript
如何手写简易的 Vue Router
2020/10/10 Javascript
[46:16]2018DOTA2亚洲邀请赛3月30日 小组赛B组 iG VS VP
2018/03/31 DOTA
[27:08]完美世界DOTA2联赛PWL S2 SZ vs Rebirth 第二场 11.21
2020/11/23 DOTA
[54:18]DOTA2-DPC中国联赛 正赛 PSG.LGD vs LBZS BO3 第一场 1月22日
2021/03/11 DOTA
Linux环境下MySQL-python安装过程分享
2015/02/02 Python
Python过滤列表用法实例分析
2016/04/29 Python
flask框架实现连接sqlite3数据库的方法分析
2018/07/16 Python
python Selenium实现付费音乐批量下载的实现方法
2019/01/24 Python
用Python将Excel数据导入到SQL Server的例子
2019/08/24 Python
利用python制作拼图小游戏的全过程
2020/12/04 Python
希尔顿酒店中国网站:Hilton中国
2017/03/11 全球购物
什么是典型的软件三层结构?软件设计为什么要分层?软件分层有什么好处?
2012/03/14 面试题
行政人事专员岗位职责
2014/03/05 职场文书
小学生国庆节演讲稿
2014/09/05 职场文书
2014年体育工作总结
2014/11/24 职场文书
详解RedisTemplate下Redis分布式锁引发的系列问题
2021/04/27 Redis
js实现模拟购物商城案例
2021/05/18 Javascript
Python sklearn分类决策树方法详解
2022/09/23 Python