0

我对 ruby​​ on rails 开发相当陌生,我遇到了麻烦,包括自动生成的 js.coffee 文件到我的 html.erb 中。

基本上发生的事情是我可以让我的 js 在我的 show.html.erb 文件中工作,但前提是我将 js 直接包含在 html.erb 文件中(即,在脚本标签中)。我希望通过将 js 放入模型的 js.coffee 文件来整理代码。所以我将js转换为coffee js并做到了。没运气。

然后我想,我们会好的,也许我在咖啡 js 中做错了什么 - 所以我只是创建了一个 model.js 文件并使用了常规 js。仍然没有运气。

我不确定我做错了什么。问题是,我可以看到 model.js 文件在这两种情况下都包含在我的 html 标记中 - 它似乎没有任何效果。

任何想法表示赞赏。

模型.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({
  #...
});

因此您的比率配置不包含在文档就绪处理程序中。结果是$("#star-1").raty({ ... })它将在 DOM 中运行之前 #star-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.js 文件(您的 show.html.erb 文件所在的位置,并将您的 javascript 代码放在那里。

  • 在控制器中不要忘记包含 format.js(默认情况下由脚手架创建)。

  • 否则尝试将代码放在 app/assets/javascript 文件夹中的 application.js 文件或 show.js 文件中。

于 2013-10-20T20:29:10.890 回答