我对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"
答案 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文件中。