1

我有一个 dijit 小部件,它相对于 dojo 的根目录位于以下位置:

/modules/components/myWidget/template/MyWidget.html

现在,除了这个模板,我还有一个图像文件也需要包含在模板中:

/modules/components/myWidget/template/myImage.png

现在,在我的模板文本中:

<img src="./myImage.png" />

但是,这会相对于应用程序根(既不是 dojo 的根,也不是模板位置)进行解析。

我怎样才能使我的模板直接解析到它的位置?

4

3 回答 3

2

好吧,我会执行以下操作,为图像添加一个附加点,例如:

<img src="" data-dojo-attach-point="imageNode" />

然后在您的 JavaScript 代码中(例如在postCreate您的小部件的函数中),我将执行以下操作:

declare([...], {
    postCreate: function() {
        this.imageNode.src = require.toUrl("./template/myImage.png");
    }
}

使用require.toUrl,您实际上会获得 URL 作为结果,如果您希望将其作为模块加载,则将使用该 URL。这意味着:

require.toUrl("./template/myImage.png");

指当前模块路径( ./),大概是/modules/components/myWidget,然后template/myImage.png

于 2013-10-14T21:41:50.403 回答
1

我有一个类似的问题,我需要一个到我的dojo/text模板的相对路径。例如

/foo
    /js
       /stuff
           SomeWidget.js
    /templates
       /MyTemplateForSomeWidget.html

事实证明,您应该提供“模块路径”而不是“愚蠢的 url”,因此这不起作用

"dojo/text!../../templates/MyTemplateForSomeWidget.html"

它给了你很大的错误IrrationalPath(没有解释)。原来你不允许使用“ ../”,所以它吓坏了。您当然可以使用绝对路径,从 a 开始/,但在我的情况下,不能保证整个路径,所以我通过在 my 中注册路径来解决这个问题dojoConfig,就像这样

dojoConfig = {
    // ...
    packages: [
        { name: 'app', location: '/foo/js/app' },
        { name: 'templatePkg', location: '/foo/templates/' },
        // ... etc
    }
}

然后只需引用templatePkg模板路径的开头,如下所示:

"dojo/text!templatePkg/MyTemplateForSomeWidget.html"

对我来说,“困难的部分”是绕过“包”必须用于 JavaScript 源的想法,并认为其他人可能有同样的误解。

希望这可以帮助。G。

于 2016-02-26T05:01:49.697 回答
0
  1. 确保require方法像模块一样被带进来
  2. 利用require.ToUrl("./relative/path")

下一个示例来自工作中的生产代码,其中我已经删除了额外的内容。让我们假设文件是app/widget/thingy.js​​:

define([
    "require" // Needed for relative require.toUrl() calls
    /* stuff */
], function(require /*stuff*/){
    var blankImage = require.toUrl("../resources/transparent.gif");
    /* stuff */
});

当它运行时,该blankImage值应该是"app/resources/transparent.gif".

此外,如果您使用 Dijits 和_WidgetBase,您还应该考虑将require值分配给contextRequire属性。这将允许您在 HTML 模板中执行以下操作:

<div data-dojo-type="./SiblingWidget"></div>
于 2013-10-14T22:48:02.220 回答