art-templateフィルタ

2624 ワード

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}
...

以上から分かるように、書き込み可能なパラメータの位置は2つあり、複数ある場合は配列やオブジェクトの形式で書かなければならない.特殊な点、第1の位置のパラメータ、オブジェクトの打点を使って値を取る方式を取ることができて、しかし第2の位置のパラメータはこのように書いてあるいは誤りを報告します
//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"}

以上から分かるように、運転順序は左から右に運転する、test 2の最初のパラメータはtest 1の戻り値であり、test 1に戻り値がない場合、test 2は後の位置にパラメータを追加し、パラメータを出力ときに最初のパラメータはundefined、すなわち、後のパラメータが指定する、前のパラメータはundefinedである.伝達関数の場合、パラメータの値は[undefined,arg2]です.
// 
{{ $test1 'test1' | $test2 'test2'}}
// 
// 
{{ $test1 | $test2 'test2'}}
// 
//{'0':[Function],'1':'test2'}

4つ目から分かるように、1つ目の関数の1つ目のパラメータに位置を指定する場合、2つ目の位置のパラメータを与えると、エラーが報告され、エラーの原因はmissing }after argument list、すなわちシステムは$test1'test1'を2つのパラメータとして処理する.第5のケースでは,第4の処理と同様に$test1をパラメータとして$test2に伝えた.