2

Rails 3.2.8 Web アプリケーションで JQuery の代わりに Dojo Toolkit 1.8 を使用しようとしています。これは主に、JQuery に基づく完全で視覚的に統一されたウィジェットがないためです。次の手順に従いました。

  • dojo、dijit、および dojox ディレクトリーを app/assets/javascripts に解凍します。
  • application.js で変更され//= require_tree .ました//= require_directory .
  • 編集されたアプリケーション レイアウト (まだ控えめではありません... テストの効果のためだけに)

ビュー/レイアウト/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 という名前のコントローラーと index アクションのテンプレートを作成しました

ビュー/ホーム/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 はうまく機能します。しかし、CoffeeScript ファイル (assets/javascripts/home.js.coffee) 内に dojo コードを入れようとすると、Firebug コンソールに「ReferenceError: require is not defined」というエラー メッセージが表示されます。サンプルコード:

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

上記のコードの前に a を配置する//= require dojo/dojoと実行されますが、すべての dojo モジュールがロードされ (domReady だけでなく)、Firebug で「エラー: defineAlreadyDefined」が発生します。

dojo.js 全体をリロードしたり、dojo グローバル変数にアクセスしたりすることなく、require 関数を呼び出す方法はありますか?

ありがとう

4

1 に答える 1

2

それは私の間違いでした。javascripts の組み込み順序を入れ替えました。正しいのは次のとおりです。

  <%= 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 はまだロードされていませんでした。

ご清聴ありがとうございました。

于 2012-09-13T16:14:48.147 に答える