我有一个名为index.html.haml的视图文件
- if this.that?
%div#if
....
....
- else
%div#else
....
....
但我想这样做:
- if this.that?
%div#if
....
....
- return
%div#else
.....
.....
这可能吗?感谢
答案 0 :(得分:4)
我知道用另一个问题回答问题是不礼貌的,但是:你有没有试过?
当然可以! ERB模板中的代码被评估为纯红宝石,因此您也可以在其中使用return
。通常需要返回“某些内容”,例如return ''
。
虽然@meagar在评论中已经说过,但它并不被视为“最佳实践”。特别是如果你在模板或部分内部深入。这是非常糟糕的风格,你的同事会恨你。在这种情况下,面部冲击很常见。
有一段时间我在部分中使用return
时没有像return if Rails.env.production?
那样呈现,但这很少见,而且当它是部分中的第一行时也非常明显。
答案 1 :(得分:1)
在搜索了haml
源代码后,我认为您正在寻找的是以下内容:
- return @haml_buffer.buffer
如果你需要.erb
的同一个hack,你应该添加
<% return @output_buffer %>
将其中一个放入您的一个视图文件中,它将“刷新”所有已连接到缓冲区的内容。
答案 2 :(得分:1)
我认为你真的不需要“黑客”本身。您可能只需要 cells gem,因为这会在您呈现的视图的一部分中为您提供一个MVC的小单元格。
这很可能会以您尝试的方式处理Model-View-Presenter。 :)
答案 3 :(得分:0)
我喜欢细胞宝石的想法,但也许你必须,只需要包含一个
flash[:something] = this.that?
在控制器中并使用某些东西吸收dom中某个数据字段中的内容,以便您通过javascript执行逻辑。
:javascript
$(document).ready(function(){
var a = $("h1").data("that")
如果==做某事?喜欢隐藏其他%div
})