handlebars Helper用法

handlebars  Helper用法:  http://www.cnblogs.com/iyangyuan/archive/2013/12/12/3471357.html

逻辑运算符在handlebars.js { { } } #如果条件:  http://www.ophome.cn/question/5732

Handlebars.registerHelper('ifCond', function(v1, v2, options) {
if(v1 === v2) {
return options.fn(this);
}
return options.inverse(this);
});



在模板中调用helper

{{#ifCond v1 v2}}
{{v1}} is equal to {{v2}}
{{else}}
{{v1}} is not equal to {{v2}}
{{/ifCond}}
Handlebars.registerHelper("ifCond",function(v1,operator,v2,options) {
switch (operator)
{
    case "==":
        return (v1==v2)?options.fn(this):options.inverse(this);

    case "!=":
        return (v1!=v2)?options.fn(this):options.inverse(this);

    case "===":
        return (v1===v2)?options.fn(this):options.inverse(this);

    case "!==":
        return (v1!==v2)?options.fn(this):options.inverse(this);

    case "&&":
        return (v1&&v2)?options.fn(this):options.inverse(this);

    case "||":
        return (v1||v2)?options.fn(this):options.inverse(this);

    case "<":
        return (v1<v2)?options.fn(this):options.inverse(this);

    case "<=":
        return (v1<=v2)?options.fn(this):options.inverse(this);

    case ">":
        return (v1>v2)?options.fn(this):options.inverse(this);

    case ">=":
     return (v1>=v2)?options.fn(this):options.inverse(this);

    default:
        return eval(""+v1+operator+v2)?options.fn(this):options.inverse(this);
}
});

 eq:

Handlebars.registerHelper( "compare", function( v1, op, v2, options ) {

var c = {
"eq": function( v1, v2 ) {
  return v1 == v2;
},
"neq": function( v1, v2 ) {
  return v1 != v2;
},
...
}

if( Object.prototype.hasOwnProperty.call( c, op ) ) {
return c[ op ].call( this, v1, v2 ) ? options.fn( this ) : options.inverse( this );
}
return options.inverse( this );
} );


{{#compare numberone "eq" numbretwo}}
do something
{{else}}
do something else
{{/compare}}
var d = {
        user_name: data.user_name,
        credentials_number: data.credentials_number,
        credentials_type: credentialsType2,
        user_address: data.user_address,
        user_birth_str: data.user_birth_str,
        user_gender: data.user_gender,
       };
 var tp = Handlebars.compile($("#user_tpl").html());
   Handlebars.registerHelper("compare",function(v1,v2,options){
    if(v1==v2)
    {
         //满足添加继续执行
          return options.fn(this);
     }
     else
     {
           //不满足条件执行else部分
           return options.inverse(this);
     }
  });
Handlebars.registerHelper("transformat",function(value){ if(value==1) { return "男"; } else if(value==2) { return "女"; } else { return "未设置"; } }); $("#user_content").html(tp(d));
{{#compare user_gender 1}}
                <span>男</span><input name="user_gender" id="user_gender" value="1"  checked="checked" type="radio">
                {{else}}
                <span>男</span><input name="user_gender" id="user_gender" value="1" type="radio">
                {{/compare}}

                {{#compare user_gender 2}}
                <span>女</span><input name="user_gender" id="user_gender" value="2"  checked="checked" type="radio">
                {{else}}
                <span>女</span><input name="user_gender" id="user_gender" value="2" type="radio">
                {{/compare}}   

 Handlebars的模板标签中,{{#if condition}}{{/if}}只能判断这个condition是否为true和false,并不能判断是否等于某个特定的值。

我们可以借助Handlebars的registerHelper方法来实现。

例子:

我取得的数据有个字段status,这个字段可能是0,1,2  当等于0时要再页面上显示 ‘可用’ ,当等于1时,在页面上显示‘不可用’,当等于2时页面显示‘保留’,其他情况下显示‘unknow’.

下面是在js里面的registerHelper的代码:

    var template = Handlebars.compile(source);  //source是html模板文件 这边就省略了  
    var data = {status : 0};  
    Handlebars.registerHelper(‘state’,function() { //这边的state是等下要用在模板文件里面的  
    if(data.status == 0){  
    return ‘可用’;  
    }else if(data.status == 1){  
    return ‘不可用’;  
    }else if(data.status == 2){  
    return ‘保留’;  
    }else{  
    return ‘Unknow’;  
    }  
      
    });  
    $(“#yourDom”).html(template(data));  
当前状态:{{state}}  
原文地址:https://www.cnblogs.com/zhuiluoyu/p/4843680.html