art-template 过滤器

以下内容是关于 art-template 过滤器里的参数以及执行顺序的测试

//node 一个测试函数
template.defaults.imports.$test1 = function(){
    console.log(arguments)
    return 1
}
//art   
//第一种情况
{{ '123' | $test1  }}   
// 编译结果  : 1 
// 终端输出: {"0":"123"}

//第二种情况
{{ $test1 '123' }}   
// 编译结果  : 1 
// 终端输出: {"0":"123"}

//第三种情况
{{ '321' |$test1 '123' }}   
// 编译结果  : 1 
// 终端输出: {"0":"321","1":"123"}

//报错
1.{{ '111' '22' | $test1 '222' }}   
2.{{ '111' | $test1 '222' '333'}}  
3.{{ obj | $test1 obj.key}}  //obj为一个对象
...
//不报错
1.{{ ['111','22'] | $test1 '222' }}   
// 终端输出: {"0":["111","22"],"1":"222"}
2.{{ '111' | $test1 ['222','333']}}  
// 终端输出: {"0":"111","1": ['222','333']}
3.{{ obj.key | $test1 obj }}  //obj为一个对象
// 终端输出: {"0":obj.key,"1":obj}
...

从上面可以看出,可以写参数的位置有两个,并且如果有多个,那必须写成数组或对象的形式.
特殊点,第一个位置的参数,可以使用对象打点取值的方式,但是第二个位置的参数这样写或报错

//node   两个测试函数
template.defaults.imports.$test1 = function(){
    console.log(1);
    console.log(arguments)
    return 1
}
template.defaults.imports.$test2 = function(){
    console.log(2);
    console.log(arguments);
    return 2
}

//art
//第一种情况
{{ '123' | $test1 | $test2  }}
//模板输出   2
//终端输出
// 1   {"0":'123'  } 
// 2   {"0": 1  } 

//第二种情况
{{ '123' | $test1 'test1'| $test2 'test2' }}
//模板输出  2
//终端输出 
//1 {"0":"123","1":"test1"}
//1 {"0":1,"1":"test2"}

//第三种情况  把$test1的return 1注释
{{ '123' | $test1 'test1'| $test2 'test2' }}
//模板输出  2
//终端输出 
//1 {"0":"123","1":"test1"}
//1 {"0":undefined,"1":"test2"}

从上可以看出,运行顺序为从左往右运行,且test2的第一个参数,为test1的返回值,当test1没有返回值,但是test2在后面的位置添加了一个参数,在输出参数的时候第一个参数为undefined,也就是说,当指定了后面的参数,且前面的参数为undefined的时候.在传进函数时,参数的值为[undefined,arg2]

//第四种情况
{{ $test1 'test1' | $test2 'test2'}}
//报错
//第五种情况
{{ $test1 | $test2 'test2'}}
//终端输出
//{'0':[Function],'1':'test2'}

从第四种可以看出,在没有给第一个函数的第一个参数指定位置时,给了第二个位置的参数,会报错,报错原因为missing }after argument list ,也就是说系统把$test1'test1'当成了两个参数来处理.
在第五种情况中,同第四种的处理,把$test1当成了参数,传到了$test2

你可能感兴趣的:(art-template 过滤器)