model.js.coffee包括但不工作

时间:2013-10-20 20:05:40

标签: javascript jquery ruby-on-rails coffeescript

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

基本上发生的事情是我可以让我的js在我的show.html.erb文件中工作,但前提是我将js直接包含在html.erb文件中(即在脚本标记中)。我希望通过将js放入模型的js.coffee文件中来整理代码。所以我将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"

2 个答案:

答案 0 :(得分:1)

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

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

变成了这个JavaScript:

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

所以你的raty配置不包含在文档就绪处理程序中。结果是$("#star-1").raty({ ... })将在 #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, "*_*"]

答案 1 :(得分:0)

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

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

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