根据模板值动态设置 CSS 属性

Posted

技术标签:

【中文标题】根据模板值动态设置 CSS 属性【英文标题】:Dynamically set a CSS property based on a template value 【发布时间】:2012-08-21 01:28:15 【问题描述】:

是否可以根据 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 是从数据库读取的对象。每个 project 生成的 html(页面上呈现的内容而不是我的 html 中的内容)看起来像这样:

<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

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

【问题讨论】:

【参考方案1】:

回答我自己的问题:需要扩展模板(来自&gt; 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.;
    
);

更新: 老实说,我应该承认我完全错过了我的代码中已经有了这个扩展模板,并且&gt; 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>

【讨论】:

以上是关于根据模板值动态设置 CSS 属性的主要内容,如果未能解决你的问题,请参考以下文章

小程序 js可以动态设置css样式属性

动态创建表格怎么用CSS设置表格属性 我是初学着,急用。我的代码如下 但是表格显示不出来

JS动态设置css的几种方式

web动态修改样式值修改style标签里面的css样式documentquerySelectorsetProperty

js怎样批量设置元素的style属性值

动态模板css的mysql结构(模板框架)