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设置body高度为浏览器高度的方法
Feb 09 Javascript
分析了一下JQuery中的extend方法实现原理
Feb 27 Javascript
JS组件Bootstrap实现下拉菜单效果代码
Apr 26 Javascript
内容滑动切换效果jquery.hwSlide.js插件封装
Jul 07 Javascript
轻松5句话解决JavaScript的作用域
Jul 15 Javascript
Bootstrap源码解读按钮(5)
Dec 23 Javascript
D3.js中强制异步文件读取同步的几种方法
Feb 06 Javascript
vue2.0实现分页组件的实例代码
Jun 22 Javascript
利用node.js实现自动生成前端项目组件的方法详解
Jul 12 Javascript
Vue.js组件高级特性实例详解
Dec 24 Javascript
vue实现购物车小案例
Sep 27 Javascript
详解ES6中class的实现原理
Oct 03 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设计模式 Prototype (原型模式)代码
2011/06/26 PHP
PHP程序员学习使用Swoole的理由
2018/06/24 PHP
thinkphp5 模型实例化获得数据对象的教程
2019/10/18 PHP
javascript 动态添加事件代码
2008/11/30 Javascript
浅谈javascript 面向对象编程
2009/10/28 Javascript
JavaScript调用Activex控件的事件的实现方法
2010/04/11 Javascript
js 复制或插入Html的实现方法小结
2010/05/19 Javascript
jQuery的each终止或跳过示例代码
2013/12/12 Javascript
js中数组排序sort方法的原理分析
2014/11/20 Javascript
JavaScript输入分钟、秒倒计时技巧总结(附代码)
2017/08/17 Javascript
select自定义小三角样式代码(实用总结)
2017/08/18 Javascript
JS实现闭包中的沙箱模式示例
2017/09/07 Javascript
使用JavaScript实现一个小程序之99乘法表
2017/09/21 Javascript
JS实现的哈夫曼编码示例【原始版与修改版】
2018/04/22 Javascript
浅谈Node.js 沙箱环境
2018/05/15 Javascript
jQuery超简单遮罩层实现方法示例
2018/09/06 jQuery
详解html-webpack-plugin插件(用法总结)
2018/09/12 Javascript
jQuery操作attr、prop、val()/text()/html()、class属性
2019/05/23 jQuery
JS设置自定义快捷键并实现图片上下左右移动
2019/10/17 Javascript
vue 路由meta 设置导航隐藏与显示功能的示例代码
2020/09/04 Javascript
python根据经纬度计算距离示例
2014/02/16 Python
python实现将html表格转换成CSV文件的方法
2015/06/28 Python
python面向对象 反射原理解析
2019/08/12 Python
Python 继承,重写,super()调用父类方法操作示例
2019/09/29 Python
Python打包模块wheel的使用方法与将python包发布到PyPI的方法详解
2020/02/12 Python
PyCharm 2020 激活到 2100 年的教程
2020/03/25 Python
Python Pandas 对列/行进行选择,增加,删除操作
2020/05/17 Python
美国生日蛋糕店:Bake Me A Wish!
2017/02/08 全球购物
Bulk Powders意大利:运动补充在线商店
2019/02/09 全球购物
美国环保妈妈、儿童和婴儿用品购物网站:The Tot
2019/11/24 全球购物
一道SQL存储过程面试题
2016/10/07 面试题
介绍下static、final、abstract区别
2015/01/30 面试题
商务英语求职自荐信范文
2013/12/24 职场文书
写给女生的道歉信
2014/01/14 职场文书
聘任书的写作格式及范文
2014/03/29 职场文书
超市仓管员岗位职责范本
2014/09/18 职场文书