0

私は Ruby on Rails 開発にかなり慣れていないため、自動生成された js.coffee ファイルを html.erb に含める際に問題が発生しています。

基本的に何が起こっているかというと、js を show.html.erb ファイルで動作させることができますが、js を html.erb ファイル (つまり、script タグ) に直接含めた場合に限られます。モデルの js.coffee ファイルに js を配置して、コードを整理したいと考えていました。だから私はjsをコーヒーjsに変換し、それをやった. 運がない。

それから、コーヒー js で何か間違ったことをしているのかもしれないと思ったので、代わりに model.js ファイルを作成し、通常の js を使用しました。まだ運がありません。

何が間違っているのかわかりません。問題は、どちらの場合でも、model.js ファイルが html マークアップに含まれていることです。効果がないように見えます。

どんな考えでも大歓迎です。

model.js.coffee:

$ ->
$("#star-1").raty
  click: (score, evt) ->
    overall_field = document.getElementById("rating_overall")
    overall_field.value = score

  number: 5
  half: true
  precision: true
  cancel: true
  size: 103
  starHalf: "bell-half.png"
  starOff: "bell-off.png"
  starOn: "bell-on.png"
  target: "#hint-1"
  targetFormat: "Overall: {score}"
  targetType: "score"
  hints: ["1", "2", "3", "4", "5", null, "", `undefined`, "*_*"]
  targetKeep: true
  targetText: "0"
4

2 に答える 2

1

CoffeeScript にインデントの問題があるようです。CoffeeScript のブロック構造はインデントによって定義されるため、次のようになります。

$ ->
$("#star-1").raty
  #...

は次の JavaScript に変換されます。

$(function() { });
$("#star-1").raty({
  #...
});

そのため、レート構成はドキュメント対応ハンドラーに含まれていません。その結果、DOM 内にある$("#star-1").raty({ ... })に実行され、有用なことは何も起こりません。 #star-1

コードを 1 つのレベルにプッシュするだけです。

$ ->
  $("#star-1").raty
    click: (score, evt) ->
      overall_field = document.getElementById("rating_overall")
      overall_field.value = score
    number: 5
    #...

そして、物事はよりうまく機能し始めるはずです。ところで、undefinedもう CoffeeScript でバックティックする必要はないので、次のようにします。

hints: ["1", "2", "3", "4", "5", null, "", `undefined`, "*_*"]

ちょうどあるべきです:

hints: ["1", "2", "3", "4", "5", null, "", undefined, "*_*"]
于 2013-10-20T21:08:15.017 に答える
0

- ビュー ページ (show.html.erb ファイルが存在する場所) に show.js ファイルを作成し、そこに JavaScript コードを配置します。

  • コントローラーに format.js を含めることを忘れないでください (デフォルトでは scaffold によって作成されます)。

  • それ以外の場合は、app/assets/javascript フォルダーの application.js ファイルまたは show.js ファイルにコードを配置して試してみてください。

于 2013-10-20T20:29:10.890 に答える