Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 把手模板中的布尔逻辑_Javascript_Ember.js_Handlebars.js - Fatal编程技术网

Javascript 把手模板中的布尔逻辑

Javascript 把手模板中的布尔逻辑,javascript,ember.js,handlebars.js,Javascript,Ember.js,Handlebars.js,是否可以在把手条件中执行布尔逻辑 现在我用一个控制器函数来欺骗这个行为,所以我最终得到了控制器 App.ApplicationController=Ember.Controller.extend({ bool1:是的, bool2:是的, both:function(){返回this.bool1&&this.bool2;}.property('content.both'), }); 这让我可以使用 {{{#如果两者都有} 两者都是真的 {{/if} 这很好,但也带来了一些问题。首先,它掩盖

是否可以在把手条件中执行布尔逻辑

现在我用一个控制器函数来欺骗这个行为,所以我最终得到了控制器

App.ApplicationController=Ember.Controller.extend({
bool1:是的,
bool2:是的,
both:function(){返回this.bool1&&this.bool2;}.property('content.both'),
});
这让我可以使用


{{{#如果两者都有}
两者都是真的

{{/if}
这很好,但也带来了一些问题。首先,它掩盖了正在发生的事情(特别是如果没有使用好的函数名)。其次,它似乎有点侵犯了MVC的分离

有没有可能按照这条路线做点什么


{{{如果bool1&&bool2}
两者都是真的

{{/if}

然后让它工作起来?

你不能直接做,但用一点解析和一个变量助手也不难。大概是这样的:

Handlebars.registerHelper('if_all', function() {
    var args = [].slice.apply(arguments);
    var opts = args.pop();

    var fn = opts.fn;
    for(var i = 0; i < args.length; ++i) {
        if(args[i])
            continue;
        fn = opts.inverse;
        break;
    }
    return fn(this);
});
您可以根据需要对
{{{if#all}}
使用任意多的参数。您可能需要调整真实性测试以匹配把手

在JavaScript中,
[]
是真实的


演示:

可能是您可以尝试此把手助手:

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);
    default:
        return options.inverse(this);
}
handlebar.registerHelper('ifCond',函数(v1,运算符,v2,选项){
开关(操作员){
案例“==”:
返回(v1==v2)?options.fn(this):options.inverse(this);
案例“=”:
返回(v1==v2)?options.fn(this):options.inverse(this);
案例“=”:
返回(v1>=v2)?options.fn(this):options.inverse(this);
案例“&&”:
return(v1&&v2)?options.fn(this):options.inverse(this);
案例“| |”:
return(v1 | | v2)?options.fn(this):options.inverse(this);
违约:
返回选项。反向(此);
}
}))

然后像这样调用它:

 {{#ifCond showDistance "&&" distance}}
      <span class="distance">
          {{distance}}
      </span>
 {{else}}
      {{#if showRegion}}
           <span class="region">
           </span>
      {{/if}}
 {{/ifCond}}

{{distance}}
{{else}
{{#if showRegion}
{{/if}
{{/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);
    default:
        return options.inverse(this);
}
 {{#ifCond showDistance "&&" distance}}
      <span class="distance">
          {{distance}}
      </span>
 {{else}}
      {{#if showRegion}}
           <span class="region">
           </span>
      {{/if}}
 {{/ifCond}}