Handlerbars.js中if-else对字符串'NULL'不起作用问题解决

这次解决问题,给我的启发:克服源码恐惧,代码都是人写出来的,敢于阅读源码,敢于修改源码。

问题描述

  1. 后台返回list数组,但是其中对象的remark字段为”null”[此处null值加引号,表示一个字符串,原因正是此处]
  2. 前端使用handlerbars.js插入html,if-else不起作用,对于if helper,跳过的条件如下

    使用if helper有条件的渲染block,如果是false, undefined, null, “” 或者 [](a “falsy” value),Handlebars不会渲染此block.

模板:

{{#each this}}
   <li>
        <div class="new_pre" data-id="{{id}}">
            <div class="new_title">{{title}}</div>
            {{#if this.remark}}
                <div class="new_jianjie">{{remark}}</div>
            {{else}}
                <div class="new_jianjie">点击标题,查看详情</div>
            {{/if}}

        </div>
        <div class="new_next">
            <div class="new_time">{{starttime}}</div>
            <div class="new_delect" data-id="{{id}}">删除</div>
        </div>
    </li>
 {{/each}} 

解决问题

  1. 修改后台接口,把remark字段值改为不加引号的null;
  2. 通过查看if-else源码,重新注册一个helper函数,来解决if判断为字符串’null’时,进入else代码块

    Handlebars.registerHelper('myif', function(text, options) {
         if(text == 'null'){
             return options.inverse(this); //跳过
         }else{
             return options.fn(this); //正常执行
         }
    });
    //使用
    {{#myif this.remark}}
        <div class="new_jianjie">{{remark}}</div>
    {{else}}
        <div class="new_jianjie">点击标题,查看详情</div>
    {{/myif}}
    

类似的自定义helper函数

1
2
3
4
5
6
7
8
Handlebars.registerHelper('myformat01', function(text, options) {
//日期格式转换,2017-02-31 变为 2017/02/31
return text.replace(/-/g,"/");
});
Handlebars.registerHelper('myformat02', function(text, options) {
//{{myformat02 @key}} ,给序号加一,使得1,2,3...
return text+1;
});
文章目录
  1. 1. 问题描述
  2. 2. 解决问题
  3. 3. 类似的自定义helper函数
|