ruby-on-rails - Dojo + Rails 3.2.8 + CoffeeScript

标签 ruby-on-rails dojo coffeescript

我尝试在 Rails 3.2.8 Web 应用程序中使用 Dojo Toolkit 1.8 代替 JQuery,主要是因为缺乏基于 JQuery 的完整且视觉上统一的小部件。请按照以下步骤操作:

  • 将 dojo、dijit 和 dojox 目录解压到 app/assets/javascripts
  • 在 application.js 中将 //= require_tree . 更改为 //= require_directory .
  • 编辑了应用程序布局(还不是不引人注目......只是为了测试效果)

views/layouts/application.html.erb

<!DOCTYPE html>
<html>
<head>
  <title>Dojo</title>
  <%= stylesheet_link_tag 'application' %>
  <%= javascript_include_tag 'application' %>
  <%= stylesheet_link_tag '/assets/dijit/themes/claro/claro.css' %>
  <%= javascript_include_tag "dojo/dojo", :'data-dojo-config' => 'async: true' %>
  <%= csrf_meta_tags %>
</head>
<body class='claro'>
  <%= yield %>
  <script>
    require(["dojo/parser", "dojo/ready"], function(parser, ready) {
      ready(function() {
        parser.parse();
      });
    });
  </script>
</body>
</html>
  • 创建了一个名为 home 的 Controller 和一个索引操作模板

views/home/index.html.erb

<input type="text" required="true" name="bday" id="bday" data-dojo-type="dijit/form/DateTextBox" value=<%= localize(Date.today - 21.days) %> />
<button id="button1" type="button" data-dojo-type="dijit/form/Button">Button 1</button>

好的,Dijit 工作得很好!但是,当我尝试将一些 dojo 代码放入 CoffeeScript 文件 (assets/javascripts/home.js.coffee) 中时,Firebug 控制台上会出现 “ReferenceError: require is not Define” 错误消息。示例代码:

require ["dojo/domReady!"], () ->
  alert('ok')

如果我在上面的代码之前放置 //= require dojo/dojo ,它会运行,但所有 dojo 模块都会加载(不仅仅是 domReady),并且会引发“错误:defineAlreadyDefined” Firebug 。

有没有什么方法可以调用 require 函数,而无需重新加载整个 dojo.js,甚至无需访问 dojo 全局变量?

谢谢

最佳答案

这是我的一个失误,我交换了 javascript 的包含顺序。正确的是:

  <%= stylesheet_link_tag '/assets/dijit/themes/claro/claro.css' %>
  <%= javascript_include_tag "dojo/dojo", :'data-dojo-config' => 'async: true' %>
  <%= stylesheet_link_tag 'application' %>
  <%= javascript_include_tag 'application' %>

当我尝试在 CoffeeScript 文件中请求模块时,Dojo 尚未加载。

感谢您的关注。

关于ruby-on-rails - Dojo + Rails 3.2.8 + CoffeeScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12391840/

相关文章:

javascript - 使用操作在 coffeescript 中循环

ruby-on-rails - Recaptcha Rails 使用 v2 或版本 2 的 reCAPTCHA

ruby-on-rails - Rails 在模型问题中包含模块

jquery - Bootstrap 轮播不工作

javascript - 当我左键单击 Dojo 中的树行(树节点)时,如何从 Objectstore 获取 ID?

CoffeeScript 使用传递的参数创建包装函数

javascript - 在 Firefox 中访问 FileReader 的部分结果

ruby-on-rails - 具有重复资源名称的命名空间

javascript - 将 XPage 应用程序从 Domino 8.5.3 迁移到 Domino 9.0 - 保留 Dojo 1.6.1?

javascript - 检查 js 文件中的角色以启用或禁用菜单项