问题标签 [sprockets]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby-on-rails - Rails 3.1 资产管道:如何加载特定于控制器的脚本?
如果我在 Rails 3.1 中生成一个新控制器,也会自动添加一个带有控制器名称的 javascript 文件。首先,我认为只有在调用相关控制器时才会使用这个 javascript 文件。
默认情况下,-file 中有指令//= require_tree .
,application.js
包括树上的每个 javascript 文件。
我怎么能只加载控制器特定的脚本?
javascript - 在rails 3.1中从html调用javascript函数
在 rails 3.1 中使用 coffeescript、jQuery 和 sprockets,coffeescript 文件被编译成如下块:
这似乎将函数 foo 和 bar 移出全局范围,因此 bar 可以由 foo 调用,但不能从 html 代码中调用。当我尝试从 select onchange 元素中调用 foo 时,我得到一个“找不到变量:foo”。
现在的解决方法是将所有全局可用的函数移动到 .js 文件中。但是这样做的正确方法是什么?
谢谢
javascript - Rails 3.1 混淆 javascript
在 Rails 3.1 中,引入了sprockets gem。我已经用 javascript/coffeescript 编写了一个非常大的游戏引擎,我计划将来作为开源软件发布,但现在我想对代码进行混淆,为试图在游戏中作弊的人建立一个小障碍. 我的问题是:
我需要做什么来创建通过组合我的所有 js 文件创建的 application.js 文件的混淆版本?是否有最佳实践、宝石或什至可能?
感谢您的回答。
汤姆
ruby-on-rails - 您如何在 Rails 3.1 中使用 Sprockets 编写干燥的模块化咖啡脚本?
我正处于尝试编写一些明智的 Javascript 的早期阶段。我想基本上以我的应用程序名称命名所有内容,以尽可能避免全局变量,但仍然给我一种访问在该位置周围声明的函数的方法。但是,我不想在函数定义中过于冗长。
我理想的 CoffeeScript 应该是这样的:
你得到图片。这样我就避免了MyApp.Module.submoduleMethod = ->
每次我想正确定义命名空间函数时都必须编写 -在@
我的类定义中使用和定义事物可以使事情变得简洁明了。
这一切都很顺利,直到我想将我的功能拆分为多个 CoffeeScript 文件。那么我真正想要的是这样的:
Sprockets 似乎无法做到这一点。
有没有一种明智的方法来要求我的 CoffeeScript 文件在我的容器文件中的正确位置?或者使用 CoffeeScript、Sprockets 和 Rails 3.1 编写模块化代码的另一种方法?
javascript - 什么会导致 Rails 3.1 "= require jquery" 停止工作?
我正在将 Rails 3.0.9 应用程序移植到 Rails 3.1.rc5。Myapplication.js
与 Rails 3.1 本身生成的完全相同:
但是当我运行我的应用程序并查看application.js
Firebug 或 Chrome 开发人员工具时,我看到的只是:
指令消失了,所以看起来该文件已被 Sprockets 处理,但指令并没有被jquery
et al 的内容替换。服务器控制台或日志中没有出现错误。
奇怪的是,当我运行一个blog
应用程序(你知道,规范的教程应用程序)时,它运行良好(也就是说,当我application.js
在 Firebug 中检查时,它包含 jQuery 的文本。)这似乎表明我的应用程序中的某些东西以某种方式干扰带链轮。有没有人听说过这样的问题(并希望有解决方法)?
这是我的设置:
我不知道可能出了什么问题。我已经三次检查了我的 Gemfile;我已经跑了又跑bundle install
了bundle update
;我试过 rc3、rc4 和现在的 rc5;我正在运行 Ruby 1.9.2p290。有任何想法吗?
javascript - 如何在我的 sprockets 预处理 js 文件(不是视图)中获取 escape_javascript 和其他帮助程序?
我正在使用 Rails 3.1 和 sprockets 的东西。
我想使用 ERB 预处理一个 js 文件,然后使用 javascript_include_tag 将其包含在内。它是从代码生成的,因此我使用 ERB 对其进行了预处理,但是我无法从 ActionView::Helpers::JavaScriptHelper 获得像 escape_javascript 这样的帮助程序
假设我的文件名为 dynamic.js.erb,它包含
如何阻止它产生错误:
当我点击我的本地服务器并要求/assets/dynamic.js
ruby-on-rails-3 - 如何调整 sprockets 加载 scss 文件的顺序?
我想影响我的 scss 文件放入最终 application.css 文件的顺序,因为我希望能够覆盖在另一个 scss 文件中定义的一些样式。
我不知道该怎么做。
亲切的问候,
尼尔斯
javascript - 链轮无法正确处理 js 文件中的 erb
我有一个简单的 gmaps V3 api 调用来生成基于位置记录中的纬度/经度的静态地图。该文件位于asset/javascripts 目录中,并命名为 location_static_map.erb.js
这是代码:
我在嵌入式 erb 代码上收到语法解析错误。请注意,我有其他针对 V3 api 构建的动态映射运行良好,因此这是嵌入式 erb 评估的定义问题....还请注意,我已尝试将文件扩展名作为 .js.erb 假设我处理顺序错误,但这导致“纬度”出现未定义的方法错误,因为它到达了 erb 代码的第一行......
另请注意,生成的 application.js 文件中发生解析错误
任何意见表示赞赏.....
ruby-on-rails - 如何在 Rails 3.0.x 中使用 Sprockets 2(如何使用预编译资产)
我正在尝试在我的 rails 3.0 app 中复制 rails 3.1 中引入的资产管道的基础知识。
到目前为止,我有这样的东西: https ://gist.github.com/1112393 。
它工作得很好:
- 我的资产在 app/assets/、lib/assets、vendor/assets...
- 它们都在 /assets 提供
- 我可以使用 sprockets 2 提供的所有东西等...
问题是,我不希望 rails 应用程序提供静态资产。服务器应该这样做。这就是为什么你可以在 rails 3.1 中预编译资产,如果我理解正确的话。所以我做了一个 rake 任务(使用 Sprockets::Environment 的预编译方法)。它有效,我的所有资产都在 /public/assets/。
例如,我有
- 应用程序-02f8c96b342b4569513d0edf39ef55eb.css
- 应用程序-505e8f472350fb1e0d15f6ad2f5e0389.js
- 画廊图标-0e922050a85718fef3cd570df4eb5845.png
但是在 rails 3.1 中,您可以在 style.css.scss.erb 中执行类似的操作
你会得到
在预编译文件中。
如果我没记错的话,stylesheet_link_tag 和 javascript_link_tag 也一样,它们在 rails 3.1 中被覆盖以添加散列。
我怎样才能做到这一点?
把你能想到的每一个想法都给我!谢谢。
coffeescript - 为什么 Rails 3.1 / Sprockets 2 / CoffeeScript 添加额外的代码?
使用 Rails 3.1 (rc5),我注意到我包含 rails(或 sprockets)的任何咖啡脚本文件都在顶部和底部添加了初始化 javascript。换句话说,一个空白的 .js.coffee 文件输出如下:
这很烦人,因为它搞砸了我的 javascript 范围(除非我真的不知道自己在做什么)。我通常将我所有的 javascript 类分离到单独的文件中,并且我相信让该函数代码包装我的类只会使它们彼此超出范围。或者,至少,我似乎无法访问它们,因为我不断收到未定义的错误。
有没有办法覆盖这个?sprockets 中的这个文件似乎与添加此代码有关: https ://github.com/sstephenson/sprockets/blob/master/lib/sprockets/jst_processor.rb
我知道将所有内容包装在一个函数中似乎是一种额外的便利,因为在加载 DOM 之前什么都不会运行,但据我所知,它只会弄乱我的范围。