型号.js.咖啡包括在内,但不起作用

model.js.coffee included but not working

本文关键字:不起作用 js 咖啡 包括 型号      更新时间:2023-09-26

我对Ruby on rails开发相当陌生,在将自动生成的js.coffee文件纳入我的html.erb时遇到了麻烦。

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

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

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

任何想法都值得赞赏。

型号.js.咖啡:

$ ->
$("#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"

看起来你的CoffeeScript中有一个缩进问题。CoffeeScript 的块结构由您的缩进定义,因此:

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

变成这个 JavaScript:

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

因此,您的 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
    #...

事情应该开始变得更好了。顺便说一句,您不必再在 CoffeeScript 中反引undefined,因此:

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

应该只是:

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

- 在视图页面(您的show.html.erb文件所在的位置)中创建一个show.js文件,并将javascript代码放在那里。

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

  • 或者尝试将
  • 代码放在应用程序.js文件或 app/assets/JavaScript 文件夹中的 show.js 文件中。