【发布时间】:2014-02-08 07:14:30
【问题描述】:
所以,当我从 javascript(或 coffeescript,我根据具体情况使用两者)渲染 html 模板时,我发现我有一个非常常见的情况,看起来不必要地笨重。例如:
我有一个这样的 JS 对象:
var thingy = {
name: 'Some Thing',
category: 'widget',
active: true
};
我可能想像这样将它渲染成 html:
<div class="widget active">Some Thing</div>
总觉得笨拙的一点是将 javascript 中的布尔检查转换为 css 类字符串。我通常最终做的是这样的:
function renderThing(thing) {
var klass = thing.active ? thing.category + " active" : thing.category
return '<div class="'+klass+'">'+thing.name+'</div>';
}
在coffeescript中这感觉更长,因为三元更冗长:
renderThing = (thing) ->
klass = if thing.active then thing.category + " active" else thing.category
'<div class="'+klass+'">'+thing.name+'</div>'
当只有一个这样的属性时,这并不算太糟糕,但如果你最终遇到三个或四个这样的情况,代码很快就会变得非常冗长。
所以,我想知道,是否有人对更简洁和/或更易读的方式有想法/建议?
【问题讨论】:
-
klass = thing.category; if (thing.active) klass += " active"? -
您能否更具体地说明“四分之三的情况”,也许是一个示例代码?你的意思是四个三元运算符?可以循环吗?
-
@Bergi 是的,我的意思是使用多个三元运算符,例如,如果一个对象可以具有多个类型的状态,例如
selected或current或active或disabled或 @987654330 @ 等。我尽量不给出一个过于具体的例子,因为我更多地认为这是一个我发现在 javascript 编程中经常遇到的一般问题。
标签: javascript html coffeescript