在每一个web应用我建,我碰到过这样的问题。我想有条件地设置HTML元素的类。例如,有时要交的<div>如下:

<div class="post">...</div>

和有时它看起来像这样:

<div class="post even recent replied_to author_is_admin">...</div>

post后每个类是有,因为某些逻辑决定是应该的。什么是最好的方法?在Rails + HAML,我一直在内疚做的东西一样的:

-classes = []
-classes << cycle('even', 'odd')
-classes << 'recent' if post.recent?
-classes << 'replied_to' if post.replied_to?
-classes << 'author_is_admin' if post.author_is_admin?
.post{:class => classes.join(' ')}
    ...

这是不漂亮,我已经缩短它使用一个辅助,所以我能做到这一点:

.post{:class => "#{cycle('even', 'odd')} #{post_classes}"}

这似乎仍然像它应该是更容易阅读,因为这是我们做所有的时间的东西。您是否有通过你做这个过程短,可读的任何方法?

有帮助吗?

解决方案

我觉得你做了什么是好的。我只想提出几个小的改进。其中之一是摆在post_classes循环调用。为了增强可读性,我会做post_classes接受邮报的说法。这就产生了一个小的冗余,但可以很容易地通过定义这种辅助方法避免:

def classes(object)
  case object
  when Post then post_classes(object)
  end
end

这样的话,你的模板代码看起来是这样的:

.post{:class => classes(Post)}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top