注意:这是一个非常奇怪和独特的用例,所以如果它看起来有点屁股倒退,我会事先道歉。
我有一个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,但我的大脑已经空白了。
答案 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 %>'
修改:添加了缺失的引号。