Javascript 车把if/else语句中的逻辑?

Javascript 车把if/else语句中的逻辑?,javascript,html,handlebars.js,Javascript,Html,Handlebars.js,请原谅我这个愚蠢的问题,我知道你不应该在车把表达式中加入逻辑,但我对这一点还不熟悉,我不知道如何避开它 基本上,我想根据handlebar表达式的值更改按钮的文本,但是如果不能在{{{if}}语句中添加逻辑运算符,我不知道如何更改按钮的文本 基本上,当{{form.target}}的值等于“new”时,我希望按钮文本说“Save”,如果值等于“edit”,我希望文本说“savechanges” 如果可以,我会这样写: <button> {{#if {{form.target}

请原谅我这个愚蠢的问题,我知道你不应该在车把表达式中加入逻辑,但我对这一点还不熟悉,我不知道如何避开它

基本上,我想根据handlebar表达式的值更改按钮的文本,但是如果不能在
{{{if}}
语句中添加逻辑运算符,我不知道如何更改按钮的文本

基本上,当
{{form.target}}
的值等于“new”时,我希望按钮文本说“Save”,如果值等于“edit”,我希望文本说“savechanges”

如果可以,我会这样写:

<button>
    {{#if {{form.target}} == 'new'}}
        Save
    {{#else if {{form.target}} == 'edit'}}
        Save Changes
    {{/if}} 
</button>

{{{#如果{form.target}}=='new'}}
拯救
{{{#else如果{{form.target}}=='edit'}
保存更改
{{/if}

显然,我在这里有点离谱,所以我希望有人能给我指出正确的方法?

你可以注册一个助手

<button>
    {{#equals form.target "new"}}
        Save
    {{else}}
        {{#equals form.target "edit"}}
            Save Changes
        {{/equals}} 
    {{/equals}} 
</button>

Handlebars.registerHelper("equals", function(string1 ,string2, options) {
    if (string1 === string2) {
        return options.fn(this);
    } else {
        return options.inverse(this);
    }
});

{{{#等于form.target“new”}
拯救
{{else}
{{{#等于form.target“edit”}
保存更改
{{/等于}
{{/等于}
把手。寄存器帮助器(“等于”),功能(string1、string2、选项){
if(string1==string2){
返回选项。fn(本);
}否则{
返回选项。反向(此);
}
});

理想情况下,您希望在
表单
对象上创建一个属性,该属性将为您提供所需的信息,例如
表单.targetIsNew
和/或
表单.targetIsEdit
。如果事先设置了该属性,则可以在If/else块中使用它

因此,在渲染把手模板之前,请设置以下属性之一:

form.targetIsNew = form.target == 'new';

如果事情更复杂,您也可以使用。

您是对的,常见的指导原则是限制在视图中使用逻辑。有时您会需要它,但在本例中,我们可以不使用它

Handlebar引用作为其
上下文传递到模板函数中的值。您可以使用一些分支逻辑将变量指定给所需的值,然后在模板中直接引用该值

细节将根据您使用把手的方式而有所不同,但以下是一个示例:

<script id="some-template" type="text/x-handlebars-template">
    <button>
        {{formSubmissionText}}
    </button>
</script>

<div id="my-app"></div>

<script>
    // create `template` function that will render the view
    let source = document.getElementById("some-template").innerHTML;
    let template = Handlebars.compile(source);

    // construct the context we'll bind to our template
    let form = getForm(); // change this to match your use
    let formSubmissionText = "Save";
    if (form.target === "edit") {
        formSubmissionText = "Save Changes";
    }

    let context = {
        formSubmissionText: formSubmissionText
    };

    // render the template
    let html = template(context);
    document.getElementById("my-app").innerHTML = html;
</script>

{{formSubmissionText}
//创建将呈现视图的“模板”函数
让source=document.getElementById(“某个模板”).innerHTML;
让template=handlebar.compile(源代码);
//构建我们将绑定到模板的上下文
让form=getForm();//更改此选项以匹配您的使用
让formSubmissionText=“保存”;
如果(form.target==“编辑”){
formSubmissionText=“保存更改”;
}
让上下文={
formSubmissionText:formSubmissionText
};
//呈现模板
设html=模板(上下文);
document.getElementById(“我的应用”).innerHTML=html;

谢谢您的帮助!