使用 dojo AMD 加载条件模板(html)

Posted

技术标签:

【中文标题】使用 dojo AMD 加载条件模板(html)【英文标题】:Conditional template(html) loading with dojo AMD 【发布时间】:2012-07-27 20:45:39 【问题描述】:

所以我有这个简单的要求:

require(['app/'+url,'dojo/text!content/'+url], function(module,template)
        if(module.init)
                module.init(
                        container: panel, 
                        containerId: 'contentTabs_' + idOp,
                        template: template
                );
        
);

但模板可能不存在(有时会存在)。所以无论发生什么,我都希望我的 require 回调被执行。

AMD 的方法是什么?

谢谢大家。

【问题讨论】:

【参考方案1】:

不要使用dojo/text!,而是编写自己的插件:

require(['foo/maybe!'+url], function(maybeTemplate) 
  if (maybeTemplate === undefined) 
    // it's there
   else 
    // it's not there
  

foo/maybe 必须解析为具有load : function (id, require, callback) 成员的对象。

load(
  id,        // the string to the right of the !
  require,   // AMD require; usually a context-sensitive require bound to the module making the plugin request
  callback   // the function the plugin should call with the return value once it is done
) -> undefined

您可以使用 XHR 调用来获取资源并在出现 404 错误时解析为 undefined

Plugin documentation in the livedocs Dojo plugin example on my blog

【讨论】:

很好的答案 我得出了同样的结论。顺便问一下,是否需要返回一个 Defered? require 返回undefined - 请参阅here。请记住,*** API 需要保持与所有其他实现 AMD 的 JS API 的兼容性。如果您需要将Deferredrequire 一起使用,请创建自己的并在回调函数中解决。

以上是关于使用 dojo AMD 加载条件模板(html)的主要内容,如果未能解决你的问题,请参考以下文章

使用 Dojo AMD 加载程序加载 jQuery 问题

是否可以通过 dojo 的 AMD 加载器向 dojo 模块请求添加请求参数

如何从AMD dojo创建构建

AMD 和 Dojo 1.7 问题

Dojo AMD 加载程序是不是确保模块只执行一次?

dojo 1.7 AMD 框架有啥好处?