2013-10-14 39 views
1

我有一个dijit的小部件,它是相对于道场的根在以下位置:现在如何在dijit模板中设置相对路径?

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

,与此模板一起,我有一个需要被包含在模板以及图像文件:现在

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

,在我的模板文本:

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

然而,这解决了相对于应用程序根目录(既不道场的根,无论是第t模板位置)。

我该怎么做才能让我的模板直接解析到它的位置?

回答

2

嗯,我会做以下,使一个连接点的图像,例如:

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

然后在你的JavaScript代码(例如,在小部件的postCreate功能)我会做以下内容:

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

随着require.toUrl,你实际上得到的网址,如果你希望将其加载的模块将被使用的结果。这意味着:

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

指的是可能/modules/components/myWidget,然后template/myImage.png当前模块路径(./)。

+0

有没有什么方法可以直接从模板中做到这一点? – Alpha

+1

我不这么认为,但是你可以把'require.toUrl(...)'放在一个属性中,然后使用''。这也应该起作用,但是你总是会有这一行代码检索你的图片URL。 – g00glen00b

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> 
1

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

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

事实证明,你应该给“模块路径”,而不是“哑URL”,因此这不会工作:

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

它给你很大的错误IrrationalPath(没有解释)。原来你不允许使用“../”,所以它吓坏了。当然你也可以使用绝对路径,通过与/开始,但在我的情况下,整个路径不保,所以我周围的问题得到了由我dojoConfig注册路径,像这样

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

然后,只需指templatePkg作为模板路径的开始,像这样:

"dojo/text!templatePkg/MyTemplateForSomeWidget.html" 

“硬的部分”对我来说是让周围的想法,“包”必须是JavaScript的来源,并认为其他人可能会有相同的误解。

希望这会有所帮助。 G.

相关问题