新的Rails 3.1资产管道非常好,但由于所有CoffeeScript(或JavaScript)文件都融入到每个页面中包含的单个文件中,因此引发了以下问题:如何限制CoffeeScript(或JavaScript)执行到Rails 3.1中的特定控制器和操作?
如何限制执行我的脚本到特定的控制器或操作?在我的CoffeeScript中有没有一种方法可以知道请求期间使用了哪个控制器和动作,以便我可以将条件语句放入脚本中?
或者我完全接近这个错误的方式?
新的Rails 3.1资产管道非常好,但由于所有CoffeeScript(或JavaScript)文件都融入到每个页面中包含的单个文件中,因此引发了以下问题:如何限制CoffeeScript(或JavaScript)执行到Rails 3.1中的特定控制器和操作?
如何限制执行我的脚本到特定的控制器或操作?在我的CoffeeScript中有没有一种方法可以知道请求期间使用了哪个控制器和动作,以便我可以将条件语句放入脚本中?
或者我完全接近这个错误的方式?
为什么不把JavaScript来实现特定控制器为这个控制器上的视图(因为它们对应有如果所以具体)?
如果它们是普通的enaugh,你可以用类,id或数据(html5)标记你的视图,并让你的javascript看起来(所以你可以重用你的代码)。
这是一个很好的问题,它帮助我认识到我真正的问题。 我真的在使用CoffeeScript,我的理解是,这只能通过资产管道(自动)提供。 换句话说,我想为一个非常特定的控制器/动作使用CoffeeScript,但我知道如何使用CoffeeScript的唯一方法是通过资产管道,其中包含每个页面的脚本。 – adamjcooper 2011-05-26 18:46:45
Trevor Burnham回答这个问题很好的位置:How do I associate a CoffeeScript file with a view?
他说:
有两种常用的方法:在一个特定元素的存在
制作行为的条件。对于 例如,代码运行注册表 应该这样来开头像
if $('#signup').length > 0
制作行为的
body
元件上的类条件。您可以使用ERB 设置主体类。这是 通常需要的样式表为 。该代码会是这样的
if $('body').hasClass 'user'
如果你有兴趣的CoffeeScript,特雷弗正在写一本书,看起来是非常好的:http://pragprog.com/titles/tbcoffee/coffeescript
对于解决方案2,您可以尝试https://github.com/tonytonyjan/gistyle,它为您设置约定以供使用。 – lulalala 2014-03-04 09:29:35
我通常做的是有一个产量:js在我的布局javascripts下,当我需要一个特定的脚本它,我直接从我的看法加载它:
content_for :js do
javascript_include_tag "myscript"
end
将coffeescript限制为特定视图的一种方法是为有问题的javascript制作自定义链轮文件,格式与application.js类似。假设你称它为extras.js。
// =需要my_code.js。咖啡
然后使用javascript_include_tag "extras"
包括在你想要的意见,即代码,无论是通过使这些观点的自定义布局,或使用content_for()
顺便说一句,你的问题说,该钢轨管道力量你把所有的js资产放在一个文件中。这不是真的。这通常可以避免多次往返,但您可以有多个链轮文件。
如果您使用的是gon宝石在咖啡脚本您的增值经销商,你可以用这个模式:
将一个标志控制器中的每一个动作:
def index
@gps_coords = GpsCoord.all
# Flag for the CoffeeScript to decide which part to run
gon.index = true;
end
def show
@gps_coord = GpsCoord.find(params[:id])
gon.lat = @gps_coord.latitude
gon.lon = @gps_coord.longitude
gon.show = true;
end
在相关的咖啡脚本使用这些标志来区分这两种行为:
# index action?
if gon.index?
first_coord = gon.gps_coords[0]
map.setView([first_coord.latitude, first_coord.longitude], 15);
# show action?
if gon.show?
map.setView([gon.lat, gon.lon], 15);
可能的http:// stackoverf重复low.com/questions/6133235/rails-3-1-rc1-javascript-and-asset-pipeline;在那里看到我的答案。 – 2011-05-26 16:10:45
谢谢Trevor;使脚本在body标签上存在元素或特定CSS类的条件看来是一种很好的方法。 – adamjcooper 2011-05-26 18:54:02