如何将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一起使用?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Ruby on Rails 3.1 中禁用资产管道(链轮)消息的日志记录?