Wil*_* E. 9 haml ruby-on-rails ruby-on-rails-3
在带有HAML(3.1.4)的rails 3.0中,我有
一些类似模板的部分,如_template.html.haml:
.panel.top
= yield :panel_top
.content
= yield
Run Code Online (Sandbox Code Playgroud)另一个部分将使用prev模板显示(所有这些东西都是使用AJAX渲染的,但这没关系)
- content_for :panel_top do
.title.left
= title
content text
Run Code Online (Sandbox Code Playgroud)这就像Rails 3.0中的魅力一样
但是,升级到3.2后这个失败了!Yiels只是产生"内容文本",所以我有两次"内容文本",根本没有标题
只有改变= yield :panel_top以= content_for :panel_top作品为3.2
我不确定这个解决方案是否正常,如果它是稳定的或推荐的,我找不到任何关于yield处理和Rails 3.1发行说明中的变化的注释,也没有找到3.2中的注释.
你能帮助组织yield内部部分的最佳方法吗?
Wil*_* E. 10
从Rails 3.0到Rails 3.2 content_for真的改变了:
3.0:
def content_for(name, content = nil, &block)
content = capture(&block) if block_given?
@_content_for[name] << content if content
@_content_for[name] unless content
end
Run Code Online (Sandbox Code Playgroud)
3.2:
def content_for(name, content = nil, &block)
if content || block_given?
content = capture(&block) if block_given?
@view_flow.append(name, content) if content
nil
else
@view_flow.get(name)
end
end
Run Code Online (Sandbox Code Playgroud)
这向我们展示了3.2 content_for作品中用于显示/插入内容的作品,不仅将其存储为命名部分.
此外,如果您尝试调试yield逻辑,那么在content_for正确初始化之前它会产生它.
因此,将片段缓存保留在讨论之外我可以得出结论,除了顶级布局之外,在任何地方插入命名部分content_for都是可取的.在帮助者和其他情况下yield应该呈现错误的结果.
| 归档时间: |
|
| 查看次数: |
3485 次 |
| 最近记录: |