使用Ruby将HTML放入javascript中

时间:2013-02-06 16:16:01

标签: ruby coffeescript sinatra haml

注意:这是一个非常奇怪和独特的用例,所以如果它看起来有点屁股倒退,我会事先道歉。

我有一个haml文件content.haml和一个coffeescript文件main.coffee。 我希望能以某种方式获得通过将content.haml渲染到coffeescript /结果javascript中的变量而得到的html。

最终结果应该是呈现给浏览器的javascript文件。

让我们说它们看起来像这样:

# content.haml
.container
  .some_content
    blah blah blah

-

# main.coffee
html_content = ???
do_something_with_html_content(html_content)

我知道,这听起来很荒谬,'使用模板','通过ajax获取HTML'等等。然而,在这个例子中,它是不可能的,一切都需要通过一个JS文件提供,我无法从中获取其他资源服务器。很奇怪,我知道。

通过加入像这样的字符串数组来手动重建coffeescript文件中的haml:

html_content = [
  '<div class"container">',
    '<div class"some_content">',
      'blah blah blah',
    '</div>',
  '</div>',
]

我不确定这样做的最佳方法。

另一种方法是将这样的东西放在咖啡文件中:

html_content = '###CONTENT###'

然后将haml渲染为ruby中的html,将coffeescript渲染为js,然后在提供给客户端之前用渲染的html替换###CONTENT###。然而,html是一个多行字符串,所以它完全破坏了javascript。

我确信必须有一些其他好方法将haml渲染成变量中的html,以便形成有效的javascript,但我的大脑已经空白了。

3 个答案:

答案 0 :(得分:0)

也许你可以在你的一个观点中尝试这样的事情:

:javascript
   html_content = <%= escape_javascript(render partial: "content")%>
   ## your own logic follows here....

答案 1 :(得分:0)

使用custom html data attribute然后在js中获取它的内容不是更好吗?

<div data-mycontent="YOUR CONTENT GOES HERE"></div>

然后在咖啡中,通过jquery使用dataset属性/数据(如果可用)。

如果通过直接编写文件来设置var,它将使js文件无法缓存,以及其他缺点。

答案 2 :(得分:0)

你可以像使用Rails那样使用sprockets gem。您只需要将CoffeeScript文件重命名为main.coffee.erb,然后像使用它一样使用它。一个haml模板。使用实例变量传递渲染的html:

html_content = '<%= @html_content %>'

修改:添加了缺失的引号。