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获取当前对象标签名称的方法
Feb 07 Javascript
jquery用data方法获取某个元素上的事件
Jun 23 Javascript
基于jQuery实现点击最后一行实现行自增效果的表格
Jan 12 Javascript
深入理解vue-loader如何使用
Jun 06 Javascript
JS操作时间 - UNIX时间戳的简单介绍(必看篇)
Aug 16 Javascript
js精确的加减乘除实例
Nov 14 Javascript
ReactNative 之FlatList使用及踩坑封装总结
Nov 29 Javascript
vue中typescript装饰器的使用方法超实用教程
Jun 17 Javascript
javascript获取select值的方法完整实例
Jun 20 Javascript
layui下拉列表select实现可输入查找的方法
Sep 28 Javascript
jQuery 实现扁平式小清新导航
Jul 07 jQuery
JavaScript TAB栏切换效果的示例
Nov 05 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
多人战的战术与战略
2020/03/04 星际争霸
ThinkPHP的cookie和session冲突造成Cookie不能使用的解决方法
2014/07/01 PHP
php多重接口的实现方法
2015/06/20 PHP
通过PHP自带的服务器来查看正则匹配结果的方法
2015/12/24 PHP
WordPress中重置文章循环的rewind_posts()函数讲解
2016/01/11 PHP
jQuery中将函数赋值给变量的调用方法
2012/03/23 Javascript
jQuery插件开发基础简单介绍
2013/01/07 Javascript
jquery 获取标签名(tagName)示例代码
2013/07/11 Javascript
js如何获取object类型里的键值
2014/02/18 Javascript
node.js中的socket.io入门实例
2014/04/26 Javascript
javascript基于DOM实现权限选择实例分析
2015/05/14 Javascript
JavaScript获取URL汇总
2015/06/08 Javascript
JS获取浮动(float)元素的style.left值为空的快速解决办法
2017/02/19 Javascript
canvas实现环形进度条效果
2017/03/23 Javascript
Vue.js鼠标悬浮更换图片功能
2017/05/17 Javascript
vue-cli中的webpack配置详解
2017/09/25 Javascript
详解webpack模块化管理和打包工具
2018/04/21 Javascript
Vue异步组件处理路由组件加载状态的解决方案
2018/09/07 Javascript
Promise扫盲贴
2019/06/24 Javascript
React组件设计模式之组合组件应用实例分析
2020/04/29 Javascript
vue3为什么要用proxy替代defineProperty
2020/10/19 Javascript
[06:53]DOTA2每周TOP10 精彩击杀集锦vol.3
2014/06/25 DOTA
python fabric实现远程部署
2017/01/05 Python
Python logging模块用法示例
2018/08/28 Python
解决安装新版PyQt5、PyQT5-tool后打不开并Designer.exe提示no Qt platform plugin的问题
2020/04/24 Python
pycharm远程连接服务器并配置python interpreter的方法
2020/12/23 Python
HTML5之HTML元素扩展(下)—增强的Form表单元素值得关注
2013/01/31 HTML / CSS
玖熙女鞋美国官网:Nine West
2016/10/06 全球购物
美国购买体育、音乐会和剧院门票网站:SelectATicket
2019/09/08 全球购物
How TDD works
2012/09/30 面试题
管理站站长岗位职责
2013/11/27 职场文书
小学生学习雷锋倡议书
2014/05/15 职场文书
计生工作先进事迹
2014/08/15 职场文书
拾金不昧表扬信怎么写
2015/05/04 职场文书
高中生社会实践心得体会
2016/01/14 职场文书
python超详细实现完整学生成绩管理系统
2022/03/17 Python