jsrender for array 和for object语法

for array 循环数组

循环使用案例

定义数组数据

var  data = {
   names: ["Maradona","Pele","Ronaldo","Messi"]
 }

模版中使用

{{for names}}
  <div>
    <b>{{: #index+1}}.</b>
    <span>{{: #data}}</span>
  </div>
{{/for}}

输出结果

1. Maradona
2. Pele
3. Ronaldo
4. Messi

索引可以在循环中通过特殊字面量#index获取,特殊字面量#data相当于this,在本例中表示每一个name。

另jsrender中使用for循环时如使用if等判断时虽然不创建常规数据作用域,但却干扰了隐藏作用域。也就是说,{{if }}不会阻断常规数据(你传入的数据)的可见性,但会干扰隐藏数据(#index、#parent)的可见性。

所以获取索引下标时尽量使用#getIndex()获取索引,避免使用#index,除非你的应用足够简单。

可以尝试下面两者使用后的区别对比

1.

{{for names}}
  {{if #data.indexOf("M") == 0}}
    <div>
      <b>{{: #index+1}}.</b>
      <span>{{: #data}}</span>
    </div>
  {{/if}}
{{/for}}

2.

 {{for names}}
   {{if #data.indexOf("M") == 0}}
     <div>
       <b>{{: #getIndex()+1}}.</b>
       <span>{{: #data}}</span>
     </div>
   {{/if}}
 {{/for}}

for object 进入object中

这里for不代表循环,表示进入到object对象中。把当前的上下文设置为Object,类似于Handlebars.js中的with。

举个例子:

var data =
{
  "title": "The A team",
  "members": [
    {
      "name": "Pete",
      "city": "members_city",
      "address": {
        "city": "address_city",
        "city1": "address_city1",
        "city2": "address_city2"
      }
    }
  ]
}

模版

{{for members}}
  {{for address}}
    <p>.{{:city}}</p>
  {{/for}}
{{/for}}

结果

address_city

从结果可以看出,虽然members的item下也有city属性,但由于通过{{for address}}进入到了address指向的Object中,{{:city}}直接从address中获取了。

同时,address有三个属性,但结果只输出了一行,证明{{for Object}}是不会循环的,仅仅是切换一下this。

时间: 2024-08-29 08:44:06

jsrender for array 和for object语法的相关文章

JsRender for object 语法说明

JsRender 作为一款JavaScript模版引擎,必不可少的会有循环功能,也就是for,但由于JsRender过于灵活,for竟然可以接受object作为循环对象. {{for Array}}和{{for Object}}都是允许的,{{for Array}}大家都能理解,就是遍历一个数组,逐个取出每个元素.但{{for Object}}就有点让人匪夷所思了,而且官方文档只是举了个没什么帮助的例子,其他无任何说明. 刚开始小菜以为{{for Object}}的用意是遍历该Object的所有

Array.isArray and Object.prototype.toString.call

Array.isArray() 用于确定传递的值是否是一个 Array. Array.isArray([1, 2, 3]); // true Array.isArray({foo: 123}); // false Array.isArray("foobar"); // false Array.isArray(undefined); // false Array.isArray(null); // false Array.isArray(new Array()); // true Arr

PHP 数组转JSON数据(convert array to JSON object);

<?php header('Content-type: appliction/json; charset=shift-JIS'); $data =array(); class Test { public $userid ; public $cmt ; } for ($x=1; $x<=50; $x++) { $test =new Test(); $test->userid = urlencode("user".strval($x)); $test->cmt =

JS 对象数组Array 根据对象object key的值排序sort,很风骚哦

有个js对象数组 var ary=[{id:1,name:"b"},{id:2,name:"b"}] 需求是根据name 或者 id的值来排序,这里有个风骚的函数 函数定义: function keysrt(key,desc) {   return function(a,b){     return desc ? ~~(a[key] < b[key]) : ~~(a[key] > b[key]);   } } 使用: var ary=[{id:1,nam

表示集合的数据结构:数组(Array),对象(Object),Map和Set

Map和Set是ES6标准新增的数据类型 Map: 是一组键值对的结构,使用一个二维数组来初始化Map,例如: var m = new Map([['xiaohong',100],['xiaolan',99],['xiaoming',108]]); 或者直接初始化一个空Map: var m = new Map(); m.set('xiaoli',98); m.get('xiaoli'); // 98 m.delete('xiaoli');//删除xiaoli这个键值对 m.get('xiaoli

JavaScript基础——引用类型(一)Object类型、Array类型

引用类型简介 引用类型的值(对象)是引用类型的一个实例.在ECMAScript中,引用类型是一种数据结构,用于将数据和功能组织在一起.它也常被称为类,但这种称呼并不妥当(虽然不妥当,在别人提起的时候,就是指ECMAScript中的引用类型,在一次面试的时候,有人就和面试官争论说"JS中没有'类'这个概念,结果可想而知--").尽管ECMAScript从技术上讲是一门面向对象的语言,但它不举杯传统的面向对象语言所支持的类和接口等基本结构.引用类型有时候也被称为对象定义,因为它们描述的是一

JS_funciton,object,Array

今天学习了js数据类型的function,Object,Array 1.function是object的一种,也是一种数据类型--可以存储在变量.数组.对象中,也可以作为参数传递到方法中去,这是一个比较新的概念,也是与java,c#中的函数概念不一样的地方(以前只知道js中的function可以执行某个功能,接受参数.返回某个值,原来还可以当成数据值来传递,和number,string类型没两样!) function的两种定义方式: 1 //1 2 function test(msg) { 3

object类型转换为Array类型

var obj = {a: 1, b: 2, c: 3}; // .... var arr = []; for(var key in obj){ if(!obj.hasOwnProperty(key)){ continue; } var item = {}; item[key] = obj[key]; arr.push(item); } console.log(arr); // [{a: 1}, {b: 2}, {c: 3}] // 将Object的属性输出成Array function obj

原生js的Function,Array,Object构造函数的prototype原型方法扩展

在js中,Function构造函数的实例化对象为Function,Array,Object构造函数. <script> Function.prototype.addMethod = function (name,fn) { this.prototype[name]=fn; } Array.addMethod('test',function(){ console.log('Array method add'); }); Object.addMethod('test',function(){ co