2014-06-07 3 views
2

내 백본 응용 프로그램의 템플릿을 만들기 위해 핸들 막대를 사용하고 있고 핸들 바 ifCond 도우미 (소스 코드를 이미 사용할 수 있음)를 사용하고 있습니다. 그리고이 두 값 사이에 쉽게 확인할 수 헬퍼 기능을 이용하면헬퍼 함수를 ​​사용하여 핸들 막대 논리 연산

{{#ifCond val1 val2 operator="!="}} 
{{/ifCond}} 

유사하게 I는 "==", ">", "<"연산자를 사용하여 예컨대.

하지만 지금 사용하고 싶습니다. & & || if 조건 블록 내의 연산자 (예 :

{{#ifCond val1 && val2}} 
{{/ifCond}} 

는뿐만 아니라 나는 경우 블록 내에서 수학 연산자를 사용하여 원하는대로 예컨대

{{#ifCond val1+1 val2 operator=">"}} 
{{/ifCond}} 

이 작업을 수행하는 가장 좋은 방법이 될 것입니다 걸 제안 해주십시오.

+0

중복 가능성 [A handlebars.js 논리 연산자의 #if {{}} 조건] (http://stackoverflow.com/questions/8853396/logical-operator-in-a-handlebars-js-if-conditional) – cgTag

답변

4

도우미 기능 내에서 Javascript의 "eval"메소드를 사용하여이를 수행 할 수 있습니다.

HandleBars.registerHelper("evalExpression", function(){ 
     var me = this, result, 
     args = Array.prototype.slice.call(arguments), 
     options = args.pop(), 
     params = args, 
     expression = options.hash.expression; 
     expression = expression.replace(/\#([0-9]+)/g, function(match, val){ 
      return params[val]; 
     }); 

     result = eval(expression); 

     if(options.hash.returnBool == "true"){ 
      if(result){ 
       return options.fn(this) 
      }else{ 
       return options.inverse(this); 
      } 
     }else{ 
      return result; 
     } 

    }) 

그리고

후 핸들 템플릿 사용 -

{{#evalExpression val1 val2 expression="#0 && #1" returnBool="true"}} 

{{else}} 

{{/evalExpression }} 

: 그리고

{{#evalExpression val1 1 val2 expression="(#0+#1) > #2" returnBool="true"}} 

{{else}} 

{{/evalExpression }}