刚刚访问我的第一个rails应用程序的CoffeeScript部分;从来没有做任何JS / CoffeeScript,所以很多问题。从:
开始在我的应用中,用户可以“声明”(获得所有权)任务(或者我称之为创意)。每个用户在任何给定时间最多可以有3个想法。所以:
1)我目前的代码如下:
$ ->
exports = this
exports.claimedCount = 0
$('.claim').bind 'ajax:success', ->
$(this).text("Claimed")
$(this).addClass("btn-success")
claimedCount++
alert(claimedCount)
假设要做的是声明一个全局var claimedCount
并在每次用户声明一个想法时递增它。 实际的作用是什么:Uncaught ReferenceError: claimedCount is not defined
为什么?我该如何定义变量?我是否甚至需要一个全局变量来实现我的目标? (每个想法都有自己的声明按钮)。
2)用户可能在已经声明了一些想法时呈现页面。因此,我需要在首次呈现页面时使用Rails设置claimedCount
。任何关于此的指针都将非常感激(我应该将我的.js.coffee
文件重命名为.js.coffee.erb
并在那里执行吗?这样的js init代码的常用位置是什么?)
非常感谢您提供任何帮助。
答案 0 :(得分:3)
我同意Khaled对第一个问题的回答。
在第二个方面,我宁愿将文件重命名为 .js.coffee.erb ,以便首先使用erb进行预处理并编写如下内容:
window.claimedCount = <%= @user.claims.count %>
答案 1 :(得分:2)
如果您将代码转换为js2coffee.com并将其转换为js,您将看到您的变量不是全局变量,因为它位于函数内部。
您可以查看question如何在咖啡脚本中声明全局变量(主要是使用window.myvariable
)
关于第二个问题,您可以将值放在html的隐藏字段中,然后使用jquery选择器抓取它。
<input type="hidden" id="claimsCount" value=<%= @user.claims.count %>>
然后在你的js
$('#claimsCount').val()