【问题标题】:How do I use Haml in a view in my new plugin?如何在新插件的视图中使用 Haml?
【发布时间】:2011-02-28 15:31:24
【问题描述】:

我正在为 jruby on rails 应用程序创建一个新插件,该插件最终将变成一个 gem。在我的插件中,我有控制器、助手和视图。对于我的观点,我想使用 Haml。问题是我似乎无法让它认识到它们是 haml 模板。甚至有可能做到这一点吗?插件有没有办法让 Haml 作为其视图的依赖项?我的意思是,我打算让我正在创建的插件有一个由插件创建的视图,可供应用程序开发人员使用。

例如:

vendor/   
  plugins/    
    my_plugin/  
      lib/  
        app/  
          views/  
            my_plugin_demo/  
              index.haml.html
           controllers/  
             my_plugin_demo_controller.rb
           helpers/

在我插件的 init.rb 中,我尝试了:

require 'my_plugin'  
require 'haml'  #doesn't seem to make a difference :(

但这似乎没有任何区别。有没有人有这方面的经验?我似乎找不到任何关于如何完成这项工作的文档。插件视图是否仅限于 .erb 模板?

更新:@Jens Fahnenbruck

我还是有点困惑...你建议我将以下内容放入 my_plugin 的 init.rb 文件中吗?

# Load Haml and Sass.  
# Haml may be undefined if we're running gems:install.  
Haml.init_rails(binding) if defined?(Haml)  

require 'my_plugin'  

我尝试这样做,但没有成功。它仍然给我以下页面错误:

Missing template my_plugin_demo/index.erb in view path app/views  

不确定我是否理解您的建议...

【问题讨论】:

  • 在没有if defined?(Haml)的情况下尝试Haml.init_rails(binding),看看是否正确加载了Haml

标签: ruby-on-rails rubygems ruby-on-rails-plugins haml


【解决方案1】:

这是我的vendor/plugins/haml/init.rb 文件,由haml --rails /path/to/app 创建(参见http://wiki.rubyonrails.org/howtos/templates/haml

begin
  require File.join(File.dirname(__FILE__), 'lib', 'haml') # From here
rescue LoadError
  begin
    require 'haml' # From gem
  rescue LoadError => e
    # gems:install may be run to install Haml with the skeleton plugin
    # but not the gem itself installed.
    # Don't die if this is the case.
    raise e unless defined?(Rake) &&
      (Rake.application.top_level_tasks.include?('gems') ||
        Rake.application.top_level_tasks.include?('gems:install'))
  end
end

# Load Haml and Sass.
# Haml may be undefined if we're running gems:install.
Haml.init_rails(binding) if defined?(Haml)

我相信最后一行是插件正常工作所需要的

更新

您的 init.rb 文件应如下所示:

require 'haml'
Haml.init_rails(binding)
require 'my_plugin'

更新 2

尝试其他文件夹结构:

vendor/   
  plugins/    
    my_plugin/  
      lib/  
      app/  <-- one level up
        views/  
          my_plugin_demo/  
            index.haml.html
         controllers/  
           my_plugin_demo_controller.rb
         helpers/

【讨论】:

  • Fahnenbruck 感谢您的回复,但我不确定它是否有效。根据您的建议,我已经用详细信息更新了我原来的问题...
  • Fahnenbruck... 我尝试了您的更新,但仍然收到以下消息:“视图路径应用程序/视图中缺少模板 my_plugin_demo/index.erb。”对于我的生活,我无法弄清楚我做错了什么。 :(
  • Fahnenbruck:似乎只有在 Rails.root/app/views/ 中放置 index.html.erb 或 index.html.haml 才能显示视图...任何时候我尝试将这些索引文件中的任何一个放在 Rails.root/vendor/plugins/my_plugin/lib/app/views/my_plugin_demo/ 它都会吐出:在视图路径 app/views 中缺少模板 my_plugin_demo/index.erb
  • 我认为您的文件结构可能有误:app 文件夹应位于 vender/plugins/my_plugin/app 而不是 vender/plugins/my_plugin/lib/app
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-14
  • 1970-01-01
  • 2013-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多