[英]DRY MVC declarative minimal controller-specific asset pipeline
有几种方法可以将特定于控制器的资产包含在Rails中:
一个不是DRY的选项是在布局中添加= yield :head
,在每个顶级视图中 添加 content_for(:head) { ... }
。 如果资产是特定于控制器的,则每个控制器仅应指定一次,而不应在每个视图中指定一次。 当然,这种方法对于特定于视图的资产来说是很棒的。
第二种非声明性的选择是添加与控制器名称相对应的资产(如果存在) 。 除了检查某物是否存在外,我还应该简单地(在适当的地方)说它存在并且必须包含在内。 另外,我不确定响应是否会被缓存以避免运行时性能下降。 积极的一面是,这种方法不需要对视图或控制器的任何变化,但它可能开辟的可能性名称冲突,特别是与传统车型。
第三种选择是将一个类型的所有资产都包含在单个文件中 。 浏览器不应下载不需要的资产,这将使调试应用程序更加困难。 如果总资产规模仍可管理,则此选项会很好。
是否有某种方法可以以DRY方式声明性地将单个控制器特定资产包括在单独的文件中,而无需使用很少的代码即可破坏MVC模型?
如果在应用程序布局中使用以下包含命令,Rails将仅将控制器特定资产文件中的代码提供给指定控制器。
<%= javascript_include_tag params[:controller] %>
<%= stylesheet_link_tag params[:controller] %>
我怀疑如果执行此操作,则还需要执行以下操作:
<%= javascript_include_tag :application %>
和<%= stylesheet_link_tag :application %>
以获得您的所有跨控制器资产 require_tree .
伪指令可以确保application.css
和<%= stylesheet_link_tag params[:controller] %>
都不会加载控制器特定的资产,实际上您可能需要删除require_tree .
并将任何跨控制器工作表直接加载到application
文件中
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.