0

次のような変数値をアプリから埋め込みのcoffeescriptに(ザッパで)コーヒークアップビューに渡す方法はありますか?

.... @render 'index', myVar:"something"

@view index: ->
  coffeescript ->
    $(document).ready ->
      I need to get to myVar here...

それが機能するなら、それは本当に滑らかに思えます...(埋め込まれたjavascriptの代わりとして)

更新:ここにいくつかの試みがあります。埋め込まれたスクリプトの文字列を ID として使用しようとしています。

coffeescript ->
  $(document).ready ->
    id = myVar

coffeescript ->
  $(document).ready ->
    id = "#{myVar}"

coffeescript ->
  $(document).ready ->
    id = @myVar

coffeescript ->
  $(document).ready ->
    id = "#{@myVar}"

私はスクリプトで簡単なjavascriptを書いた->関数(それは単なる文字列なので、変数を簡単に補間できる)なので、それを回避しましたが、coffeescriptの方法の方がきれいです。ブラウザー側でスコープが失われることは理にかなっています-私はそれを行う方法を理解しようとしていました.

4

1 に答える 1

2

「スクリプト->関数」とは、次のような意味だと思います。

  doctype 5
  html ->
    body ->
      h1 "Hello world."
      script "myvar = \"#{@myvar}\""
      coffeescript ->
        console.log myvar

少なくとも、それはハックの回避策です。これは、オブジェクトでも実行できます。通常、シリアル化にJSONなどを使用します。

しかし、私はこれを「クリーンなコーヒースクリプトの方法」として分類しないので、疑問はまだ残っていると思います!

少し詳しく説明します。ここでの問題は、2つのコンテキストでcoffeescriptコードを実行していることです。1つはクライアントに送信するhtmlを生成するサーバー上にあり、もう1つは構成のコンテキストでクライアント自体にありますcoffeescript ->

サーバー側はローカルなどを認識しているため、サーバーで実行されるコードの場合、Coffeescriptベースのテンプレートを評価し、テンプレート変数を値などに置き換えるのは簡単です。

クライアントではそうではありません。まず第一に、クライアントはローカル/テンプレート変数について何も知りません。ページがサーバー側にレンダリングされたときに含まれているものだけを確認します。また、coffeescriptは、クライアントのローカル変数を参照するのか、サーバーのテンプレート変数を参照するのかを認識しないため、coffeescript構造内で単純なテンプレート拡張を実行しても機能しません。理論的には、「coffeescriptコード内のテンプレート変数を拡張する」ことを示す特別なシーケンスも存在する可能性がありますが、それでは、コーヒーカップの上に新しいテンプレート言語を作成しているだけです。もちろん、通常のコーヒースクリプトのように見せることもできます。たとえばserverLocal(SOMEREF)、SOMEREFが対応する値に置き換えられます。

理論的には、Coffeecupは、script上記で示したハックと同様の「ハック」を使用して、クライアント側にアクセスする変数としてすべての(または選択した)ローカルを共有する構造をサポートできます。単純な文字列よりも多くの種類のデータをサポートするためにJSONなどを使用します。

于 2012-06-23T14:13:46.627 に答える