0

刚刚进入我的第一个 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)

应该做的是声明一个全局变量claimedCount并在每次用户声明一个想法时递增它。实际上什么都没有:Uncaught ReferenceError: claimedCount is not defined

这是为什么?我应该如何真正定义变量?我什至需要一个全局变量来完成我想要做的事情?(每个想法都有自己的声明按钮)。

2)用户可能会在他们已经拥有一些想法时呈现页面。因此,我需要claimedCount在第一次渲染页面时设置 using Rails。对此的任何指针将不胜感激(我应该将我的.js.coffee文件重命名.js.coffee.erb并在那里执行吗?这样的 js 初始化代码的常见位置是什么?)

非常感谢您提供的任何帮助。

4

2 回答 2

3

我同意 Khaled 对第一个问题的回答。

在第二个中,我宁愿将文件重命名为.js.coffee.erb以便首先使用 erb 对其进行预处理并编写如下内容:

window.claimedCount = <%= @user.claims.count %>
于 2013-01-02T19:09:56.317 回答
2

如果您将代码带到js2coffee.com并将其转换为 js,您将看到您的变量不是全局变量,因为它位于函数内部。

您可以查看有关如何在咖啡脚本中声明全局变量的问题(主要是您使用window.myvariable

关于第二个问题,您可以将值放在 html 中的隐藏字段中,然后使用 jquery 选择器获取它。

<input type="hidden" id="claimsCount" value=<%= @user.claims.count %>>

然后在你的js中

$('#claimsCount').val()

于 2013-01-02T18:51:53.057 回答