2013-01-02 42 views
0

只需进入我的第一个Rails应用程序的CoffeeScript部分;以前从未做过任何JS/CoffeeScript,所以有很多问题。开始于:CoffeeScript和Rails:设置和获取全局变量

在我的应用程序中,用户可以“声称”(取得所有权)任务(或我称之为的想法)。每个用户在任何给定时间最多可以有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)用户可能在他们已经提出了一些想法时呈现该页面。因此,我需要在第一次渲染页面时使用Rails设置claimedCount。任何指针都将不胜感激(我应该重新命名我的.js.coffee文件.js.coffee.erb并在那里做呢?像这样的js init代码的常见现象是什么?)

非常感谢您的任何帮助。

+1

的JavaScript的每一位应作用域到最小的相关DOM元素。我想我应该开源内部js的'框架'我使用 – apneadiving

+0

当然,我应该以最有限的方式,我可以范围瓦尔斯。这是我的问题:我可以如何制造它们,以及如何?我需要全球变量吗?如果不是,那么我需要什么? – ezuk

+0

基本上,创建一个名称空间:'YourAppName'。然后,对于每个页面,您可以在应用程序的一个名称空间中包含一个名称空间 – apneadiving

回答

3

我哈立德对第一个问题的答案一致。

在第二个,我宁愿重新命名,它是第一个与预处理的ERB文件.js.coffee.erb这么写是这样的:

window.claimedCount = <%= @user.claims.count %> 
+0

请注意,在生产过程中,您的资产已预编译,因此索赔计数不会更新(除非您重新编译资产)。 '.js.coffee.erb'几乎不是一个好主意 – montrealmike

2

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

您可以检查此question如何申报咖啡脚本(主要是使用window.myvariable)全局变量

关于第二个问题,你可以把价值在一个隐藏字段在HTML,然后用抢吧jQuery选择器。

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

然后在你的js

$('#claimsCount').val()