Spa*_*lex 12 javascript ruby gem ruby-on-rails
我创建了一个Rails引擎,可以轻松地为rails应用程序包含一个JavaScript插件.问题是这个插件实际上只用于开发,当将应用程序推向生产时,开发人员需要删除require marxjavascript清单文件,然后删除JavaScript中的实际调用.
我希望做的是允许开发人员将其添加到Gemfile中,gem 'marxjs-rails', group: :development并在config/application.rb或config/environments/development.rb中设置一些配置以进行插件设置.
然后gem应该将html插入父应用程序:
<script src='marx.js'></script>
<script>
var marx = new Marx()
</script>
Run Code Online (Sandbox Code Playgroud)
我一直在玩一个帮助方法来插入html,但是我无法将其作为html插入.Rails继续逃避HTML.虽然我不喜欢这条道路.
我一直在浏览jasmine-gem和rack-olark作为示例,但是无法完成任何工作.
UPDATE
这不是我真正想要的解决方案,但这可能对其他人有帮助,而且我正在使用它直到我能找到更好的方法来做到这一点.你可以在这里查看整个代码,但我会给你一些亮点:
# lib/marxjs/rails.rb
require "marxjs/rails/version"
require "marxjs/view_helpers"
module Marxjs
module Rails
class Engine < ::Rails::Engine
initializer "marxjs.view_helpers" do
ActionView::Base.send :include, ViewHelpers
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
和视图助手:
# lib/marxjs/view_helpers.rb
require 'erb'
module Marxjs
module ViewHelpers
include ActionView::Helpers::OutputSafetyHelper
def render_marxjs options={}, dev_only=true
if dev_only == false || (dev_only && ::Rails.env.development?)
binding.local_variable_set(:options, options.to_json)
template_file = ::File.read(::File.expand_path('../templates/marxjs.erb', __FILE__))
raw ERB.new(template_file).result(binding)
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
这里带走的最重要的事情是,include ActionView::Helpers::OutputSafetyHelper而且require 'erb'
这使我们能够加载模板erb文件并用于ERB.new渲染它并用于raw防止rails逃脱html.我还将一个选项变量绑定到binding对象以将其发送到模板.
<script src="assets/marx.js"></script>
<script>
var marx = new Marx(<%= options %>);
</script>
Run Code Online (Sandbox Code Playgroud)
最后在我的主rails应用程序中,我调用render_marxjs(controls: 'toggle-all')了application.html.haml(如果你愿意,还可以调用.erb)
我仍然在寻找有人帮助我处理这个没有视图帮助方法,也能够通过环境文件设置一些配置,但我希望这可能有助于一些...
对我来说,最好的方法是在所有环境中添加引擎,但需要单独使用application.html.haml:
= javascript_include_tag "mark.js" if Rails.env.development?
Run Code Online (Sandbox Code Playgroud)
请务必将其添加到您的 config/application.rb 中并进行编译:
config.assets.precompile += %w( mark.js )
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
707 次 |
| 最近记录: |