1

简单的问题。

AMD DOJO 实现是否支持这些类型的声明?

  1. 文本!./plain.html

    define(["../Widget","text!./plain.html"],
      function(Widget,plain){
      return new Widget({name:"mainApp",template:plain});
    }); 
    
  2. 加载非模块,比如 underscore.js

    require(['dir/underscore.js'], function(){
     _.reduce ...
    });
    
4

1 回答 1

2

是的,但是确切的语法与问题中使用的语法不同。

加载字符数据的插件是dojo/text.

加载 JavaScript 库时不应使用扩展名,并且文件的位置是通过 dojotoolkit 库的相对位置或 dojoConfig 中的 位置声明设置的:

require(['underscore'], function( _ ){
 _.reduce ...
});

在 Dojo 配置中配置命名空间以避免混乱的导入路径 - 请参阅dojoConfig加载程序文档。

此外,考虑使用dojo/global模块和/或将 Dojo 模块定义为 Underscore.js 的包装器:

//_.js
define(['dojo/global', 'underscore'], function(global){
  return global._
});

考虑到上述考虑,您必须手动加载实际的 .js 文件。如果与 dojo/text 插件结合使用,可以创建一个包装器,该包装器还加载所需的 JS 并对其进行评估,以下可以解决问题。

/var/www/dojo-release-1.7/ext_lib/_.js - 此示例文件分层放置在库名称空间中,与 dojo、dijit、dojox 并排放置

define(['dojo/global', 'dojo/text!./Underscore.js'], function(global, scriptContents){
  global.eval(scriptContents);
  return global._ // '_' is the evaluated reference from window['_']
  /** 
   * Alternatively, wrap even further to maintain a closure scope thus hiding _ from global
   *  - so adapt global.eval to simply eval
   *  - remove above return statement
   *  - return a dojo declared module with a getInstance simple method
  */
  function get_ () { return _ };
  var __Underscore = declare('ext_lib._', [/*mixins - none*/], {
        getInstance: get_
  });
  // practical 'static' reference too, callable by 'ext_lib.getInstance' without creating a 'new ext_lib._'
  __Underscore.getInstance = get_;
  return __Underscore;
});

使用 declare here 定义自己的模块的示例注意:此代码未经测试;随时添加更正。

于 2012-07-15T20:08:42.237 回答