MochiKit を dojo toolkit で管理しようと思った
http://svn.mochikit.com/mochikit/trunk/MochiKit/MochiKit.js
if (typeof(JSAN) != 'undefined' || typeof(dojo) != 'undefined') { if (typeof(dojo) != 'undefined') { dojo.provide('MochiKit.MochiKit'); dojo.require("MochiKit.*"); }
MochiKit はその辺も考慮されて作られているようだ。
しかし、実際に使ってみると
<script type="text/javascript" src="/js/dojo.js"></script> <script type="text/javascript"> // <![CDATA[ dojo.setModulePrefix('MochiKit', '/js/MochiKit'); dojo.require('MochiKit.MochiKit'); // ]]> <script>
こんなエラーが出た。
symbol 'MochiKit' is not defined after loading '__package__.js'
調べてみると
http://svn.mochikit.com/mochikit/trunk/MochiKit/__package__.js
dojo.hostenv.conditionalLoadModule({ "common": [ "MochiKit.Base", "MochiKit.Iter", "MochiKit.Logging", "MochiKit.DateTime", "MochiKit.Format", "MochiKit.Async", "MochiKit.Color" ], "browser": [ "MochiKit.DOM", "MochiKit.Style", "MochiKit.Signal", "MochiKit.LoggingPane", "MochiKit.Visual" ] }); dojo.hostenv.moduleLoaded("MochiKit.*");
これの dojo.hostenv.conditionalLoadModule, dojo.hostenv.moduleLoaded がないのが原因らしい
という訳で grep してみると dojo/src/compat/0.2.2.js というのがあった
http://svn.dojotoolkit.org/dojo/trunk/src/compat/0.2.2.js
dojo.hostenv.moduleLoaded = function(){ return dojo.hostenv.startPackage.apply(dojo.hostenv, arguments); } : : dojo.hostenv.conditionalLoadModule = function(){ dojo.kwCompoundRequire.apply(dojo, arguments); }
なるほど、0.2.2 の次のバージョンで大きく関数名の変更があったのか。
じゃあよみこんでみよう。
<script type="text/javascript" src="/js/dojo.js"></script> <script type="text/javascript" src="/js/src/compat/0.2.2.js"></script> <script type="text/javascript"> // <![CDATA[ dojo.setModulePrefix('MochiKit', '/js/MochiKit'); dojo.require('MochiKit.MochiKit'); // ]]> <script>
おお。うまくうごいた
dojo のお作法的には
こうする。
<script type="text/javascript"> // <![CDATA[ var djConfig = { compat: '0.2.2' }; // ]]> </script> <script type="text/javascript" src="/js/dojo.js"></script> <script type="text/javascript"> // <![CDATA[ dojo.setModulePrefix('MochiKit', '/js/MochiKit'); dojo.require('MochiKit.MochiKit'); // ]]> <script>
おお。うまくうごいた