【问题标题】:Outputting directly to template with Embedded Javascript Syntax使用嵌入式 Javascript 语法直接输出到模板
【发布时间】:2014-10-03 00:59:53
【问题描述】:

我正在使用带有下划线模板的 Backbone。我的代码中有一个 JavaScript if() 条件,看起来像这样:

<div class='faces'>
    <% if(somevalue === true) { %>
       your face
    <% } else { %>
       my face
    <% } %>
</div>

但是我发现这种语法很尴尬,我真的很想使用类似下面的东西,即使它实际上不起作用(用文本替换整个文档):

<div class='faces'>
    <% if(somevalue === true) { 
        document.write("your face");
    } else { 
        document.write("my face");
    }
</div>

我希望在模板中准确地在调用它的位置输出字符串。对于输出一个简单的变量,EJS(和下划线)有一个很棒的语法

<%= somevalue %>

=document.write() 将其输出到模板中的关键部分。我想要完成的事情可能吗? JavaScript 可以内联输出吗?

【问题讨论】:

    标签: javascript backbone.js underscore.js underscore.js-templating


    【解决方案1】:

    有几个选项,您可以使用&lt;%= %&gt; 和三元:

    <%= somevalue == true ? 'your face' : 'my face' %>
    

    或者你可以使用print:

    您还可以在 JavaScript 代码中使用 print。这有时比使用&lt;%= ... %&gt; 更方便。

    var compiled = _.template("<% print('Hello ' + epithet); %>");
    compiled({epithet: "stooge"});
    => "Hello stooge."
    

    所以你可以这样做:

    <% if(somevalue == true) { 
        print("your face");
    } else { 
        print("my face");
    } %>
    

    我假设if(somevalue = true) 是一个错字,应该是if(somevalue == true)

    【讨论】:

    • 太棒了!打印是我需要的。三元对于实际场景不够灵活,但要牢记在心。我实际上并不知道 JS 中有任何其他命令可以输出到 DOM。谢谢你!
    • @MikeMurko:print 实际上是特定于 Underscore 模板的,并且正好适合您的情况。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-20
    • 2022-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多