如果您mycompany.widgets.ComplexEmbeddedWidget
迫切希望在初始化后(在构造函数中)设置对象'stuff',那么我不确定这种方法是否可行,但是一个简单的修复可能是删除 ${stuff} 周围的 ' 引号?
发生的情况基本上是您使用 dijit/_TemplatedMixin 派生小部件。这反过来,在 buildRendering 期间,在“this”(小部件)上调用 _stringRepl。我不完全确定流程,因为您正在使用 WidgetsInTemplate..
例如,通过标记将小部件属性设置为数组:
<div
data-dojo-type="dijit.form.Select"
data-dojo-props="options:[ 'val1', 'val2']">
</div>
如您所见,值周围没有引号 - 否则它将呈现为字符串。然后让我们将您的 ComplexEmbedded 模板更改为
dojo.declare("exampleName", [_WidgetsInTemplateMixin, _TemplatedMixin], {
templateString: '<div class="outerWidgetDomNode">
...
<div class="thing"
data-dojo-type="mycompany.widgets.ComplexEmbeddedWidget"
data-dojo-props="stuff: ${stuff}"></div>
...
'
});
要使用对象实例化 ComplexEmbeddedWidget.stuff,这需要是一个字符串。_Templated 使用 dojo.string.substitute,如果给定深层嵌套对象,它可能会失败。
标记示例:
<div data-dojo-type="exampleName" data-dojo-props="stuff: '{ json:\'Representation\', as:\'String\'}'"></div>
或通过程序化
var myObj = { obj:'Representation', as:'Object' };
var anExampleName = new exampleName({
stuff: dojo.toJson(myObj) // stringify here
}, 'exampleNode');
让我们知道进展如何,我一直想通过这种将小部件嵌入模板内容来研究流的存在有一段时间了 :)