0

注:これは非常に奇妙でユニークなユース ケースです。

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 を取得する」など、ばかげているように聞こえますが、この場合は不可能です。すべてを 1 つの 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 に###CONTENT###レンダリングしてから、クライアントに提供する前にレンダリングされた html に置き換えます。ただし、html は複数行の文字列であるため、javascript を完全に破壊します。

有効な JavaScript を形成するように、haml を変数内の html にレンダリングする別の優れた方法があるに違いないと確信していますが、私の脳は空白になりました。

4

3 に答える 3

0

おそらく、ビューの 1 つで次のようなことを試すことができます。

: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 に答える
0

Rails のように、sprockets gem を使用してそれを行うことができます。CoffeeScript ファイルの名前を に変更しmain.coffee.erb、haml テンプレートなどと同じように使用するだけです。インスタンス変数を使用して、レンダリングされた html を渡します。

html_content = '<%= @html_content %>'

編集:欠落している引用符を追加しました。

于 2013-02-06T16:28:21.690 に答える