Rails / JavaScript 在渲染视图之前交换 CSS 类
Rails / JavaScript exchange CSS-Classes before rendering the view
目前,我正在做一个Rails项目,我使用Bootstrap-Theme(CSS-Files,JavaScript-Files等),我已将其作为Gem包含在rails项目中。
视图中的标记取决于此引导主题。我们在这个项目中包含了其他的 Rails-Engine,这也依赖于这个 Gem 的视图标记。
我们想要做的是开发一个"模板"系统。假设我们有一个定义的框,它有一个标题和一个正文。然后,如果包含引导程序主题,它将附加相应的引导程序标记。如果使用其他主题,则将为此主题附加相应的标记。
现在,如果我们想在未来将引导模板与例如 Zurb-Foundation-Template 交换。然后我们迷失了,因为我们必须重构每个视图,并将类似引导的标记替换为 Zurb 标记。
第一个想法是在JavaScript中开发这个模板,这将改变文档就绪的CSS类,但这不能处理大型DOM树。
是否有任何宝石可用于此目的?如何在Ruby/Rails中实现这样的系统?
提前感谢!
我怀疑你能否找到一个开箱即用的宝石,给你这种功能。基本上,要实现这一点,你需要使用DSL编写所有视图,该DSL可以转换为Bootstrap,Zurb或其他框架。
这个DSL可以在Rails引擎中实现为一系列辅助方法。
例如,您的视图可能如下所示:(假设您使用 ERB 作为模板引擎)
<%= box do %>
<%= header 'Title of the Box' %>
<%= body do %>
<p>Box content here</p>
<% end %>
<% end %>
这些方法的定义可能如下所示:(伪代码)
def box(options = {})
case EngineName.config.framework.to_sym
when :bootstrap
klass = '..' # the class you want
when :zurb
klass = '...' # the class you want
end
content_tag(:section, class: klass) { yield }
end
在config/initializers/framework.rb
文件中,您可以像这样配置引擎:
EngineName.config.framework = :bootstrap # or :zurb
这种方法有一些优点和缺点。
优点
- 理论上,您可以切换模板框架,而无需实际更改视图。
缺点
- 您必须维护一个单独的模板DSL,以便抽象出特定于框架的类名等。这可能非常耗时,尤其是当框架需要非常不同的标记才能获得相同的结果时。如果您没有预见到未来的标记,那么您最终需要更改视图以支持它。
就个人而言,我认为您应该考虑只使用一个框架,而不必担心这一点。您的模板 DSL 不太可能面向未来,因此创建一个模板可能只是不必要的工作。
- CSS-如何定位内容数据标题
- 窗口大小html css
- 如果文本字段为空,则使用JavaScript应用CSS样式
- 我可以通过JQuery将CSS类交换为一个特殊的元素集吗
- 特定的JavaScript函数,用于将CSS样式表与下拉菜单交换
- li类只能与css交换吗
- 如何根据用户所在的页面交换 css 类
- Rails / JavaScript 在渲染视图之前交换 CSS 类
- 可交换的CSS主题与jQuery事件处理程序
- 交换CSS颜色
- 将cookie添加到现有的Javascript外部CSS文件交换中
- Javascript和CSS点击Div交换
- 检测设备和交换CSS文件- jQuery
- 用文本交换图像(CSS或jQuery?).
- 在dom准备好之前交换css文件,因为我不想让我的页面轻弹
- 如何交换CSS -无法获得元素样式表[objecthtmllinkelement]
- 如何使用jQuery's标志来交换CSS显示属性
- CSS+Javascript交换不同的背景图像
- 在jQuery .load事件上交换CSS类
- 我可以使用javascript更改单独的页面css条目(而不是交换样式表)