9

是否可以根据 handlebars.js 模板值动态设置输入字段的文本颜色?

我最初使用此模板创建我的 html:

<div class="board">
    <div class="header">
        <span class="name">Project</span>
        <span class="status">Status</span>
    </div>
    {{#each projects}}
    {{> project}}
    {{/each}}
</div>

projects从数据库读取的对象在哪里。每个生成的 html(页面上呈现的内容而不是我的 html 中的内容)project看起来像这样:

<div class="project">
    <span class="name">FOO</span>
    <span class="status">OK</span>
</div>
<div class="project">
    <span class="name">BAR</span>
    <span class="status">NOTOK</span>
</div>

我想用动态设置的 OK & NOTOK 文本的颜色来渲染这个 html。

我已经有一个车把辅助函数,它将根据每个选项成功返回正确的颜色代码,我可以使用以下方法调用它:

{{getStatusColor currentStatus}}

我想做的是把这个函数调用直接放入css本身,有点像:

font-color: {{getStatusColor currentStatus}}

但显然这行不通。这个功能确实感觉是正确的方法,但是我可以在哪里使用它来正确格式化页面上的文本?

4

1 回答 1

17

回答我自己的问题:需要扩展模板(从{{> projects}})以允许条件渲染。

<div class="board">
    <div class="header">
        <span class="name">Project</span>
        <span class="status">Status</span>
    </div>
    {{#each projects}}
    <div class="project">
        <span class="name">{{name}}</span>
        <span class="status" style="color:{{getStatusColor status}}">{{status}}</span>
    </div>
    {{/each}}
</div>

为了完整起见,辅助函数 getStatusColor 如下所示:

Handlebars.registerHelper('getStatusColor', function(status) {
    switch (status) {
        case "GOOD" : {
            return 'green';
        }
        break;
        case "BAD" : {
            return 'red';
        }
        break;
        default : {
        ...etc.;
    }
});

更新:为了诚实起见,我应该承认我完全错过了我的代码中已经有了这个扩展模板并且{{> projects}}指向了这一点。我应该style="color:{{getStatusColor status}}"直接将属性添加到引用的project模板中。因此,为了我和其他人的利益,最终的、有效的 HTML:

<template name="foo">
    <div class="board">
    <div class="header">
        <span class="name">Project</span>
        <span class="status">Status</span>
    </div>
    {{#each projects}}
    {{> project}}
    {{/each}}
    </div>
</template>

<template name="project">
    <div class="project {{selected}}">
        <span class="name">{{name}}</span>
        <span class="status"style="color:{{getStatusColor status}}">{{status}}</span>
    </div>
</template>
于 2012-08-26T02:59:21.500 回答