如何将dojo工具包与rails 3.1资产管道和coffeescript一起使用?

Posted

技术标签:

【中文标题】如何将dojo工具包与rails 3.1资产管道和coffeescript一起使用?【英文标题】:How to use dojo toolkit with rails 3.1 asset pipeline and coffeescript? 【发布时间】:2011-09-10 08:45:29 【问题描述】:

我正在尝试将 dojo-toolkit 用作 rails 3.1 应用程序上的 JS 框架,但我正在努力将 dojo 要求结构与 sprockets 要求和咖啡脚本结合起来。似乎 dojo 需要磁盘上的 JS 文件,但我猜它们是从 coffeescript 动态创建的。

想知道是否有人知道这两个 require-s 是如何共存的。

【问题讨论】:

【参考方案1】:

我最近不得不使用 rails 3.1 和资产管道安装 dojo。以下是我为其工作所遵循的步骤:

1/ 包括道场

将 dojo SDK 放在 vendor/assets/javascripts 下,这样您就可以在其中获得 dojo、dijit 和 dojox 文件夹。将其包含在您的模板中:

= javascript_include_tag "dojo/dojo", :'data-dojo-config' => %Q(baseUrl: '/assets/dojo/', modulePaths: modules: '/assets/modules', widgets: '/assets/widgets')

不要忘记资产的前导“/”!

您可以使用Google CDN with a fallback:

script var djConfig =  baseUrl: '/assets/dojo/', modulePaths: modules: '/assets/modules', widgets: 'widgets' ;
= javascript_include_tag "http://ajax.googleapis.com/ajax/libs/dojo/1.6.1/dojo/dojo.xd.js"
script ="typeof(dojo) === \"undefined\" && document.write(unescape('%3Cscript src=\"#asset_path('dojo/dojo')\"%3E%3C/script%3E'));".html_safe

第一行设置你的djConfig。第二个实际上需要来自 Google 的 dojo。三是后备。


2/ 包含您的基本文件

删除您的 app/assets/javascripts/application.js 中的所有“要求”并放入类似的内容(例如):

dojo.provide("myapp");

3/ 玩 dojo.require

在 1/ 的 djConfig 中,我设置了 modulePaths,将它们自定义为您想要的。在我的示例中,您将拥有这两个可以放置文件的位置:

app/assets/javascripts/modules/ app/assets/javascripts/widgets/

如果我想需要模块/test.js,我就这样做:

dojo.require("modules.test");

4/ 使用coffeescript和ERB

只需添加正确的扩展名并启动正确的 erb,如 Rails documentation 中所述。

希望对你有帮助!

【讨论】:

红宝石新手。我到底把= javascript_include_tag "dojo/dojo", :'data-dojo-config' => %Q(baseUrl: '/assets/dojo/', modulePaths: modules: '/assets/modules', widgets: '/assets/widgets')放在哪里?这个模板在哪里? 在 Rails 中它会在你的 /views/layout/application.html.erb 文件中

以上是关于如何将dojo工具包与rails 3.1资产管道和coffeescript一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

rails 3.1资产管道路由错误

Rails 3.1 资产管道:如何加载特定于控制器的脚本?

Rails 3.1 资产管道和缓存

如何在 Ruby on Rails 3.1 中禁用资产管道(链轮)消息的日志记录?

>=Rails 3.1 如何在资产管道中包含 IE 特定的 YAML-CSS 文件

用于 JavaScript 的 Rails 3.1 资产管道