0

注意:这是一个非常奇怪和独特的用例,所以如果它看起来有点落后,我提前道歉。

我有一个haml 文件content.haml和一个coffeescript 文件main.coffee。我希望以某种方式将渲染 content.haml 生成的 html 转换为 coffeescript/resulting javascript 中的变量。

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

假设它们看起来像这样:

# content.haml
.container
  .some_content
    blah blah blah

-

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

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

通过加入这样的字符串数组来手动重建咖啡脚本文件中的haml:

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

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

我想到的另一种方法是将这样的内容放入咖啡文件中:

html_content = '###CONTENT###'

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

我确信一定有其他很好的方法可以将 haml 渲染为变量中的 html,以便它形成有效的 javascript,但我的大脑已经一片空白。

4

3 回答 3

0

您可以像 Rails 一样使用 sprockets gem 来做到这一点。您只需将 CoffeeScript 文件重命名为main.coffee.erb并像使用 haml 模板一样使用它。使用实例变量传入渲染的 html:

html_content = '<%= @html_content %>'

编辑:添加缺少的引号。

于 2013-02-06T16:28:21.690 回答
0

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

:javascript
   html_content = <%= escape_javascript(render partial: "content")%>
   ## your own logic follows here....
于 2013-02-06T16:24:03.983 回答
0

使用自定义的htmldata属性,然后在js中获取它的内容不是更好吗?

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

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

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

于 2013-02-06T16:24:45.030 回答