mycompany.widgets.ComplexEmbeddedWidget
(コンストラクターで) 初期化されたオブジェクトの「もの」をすでに設定しておきたい場合は、このアプローチがうまくいくかどうかわかりませんが、簡単な修正で ${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');
しばらくの間、ウィジェットをテンプレートのものに埋め込むことで、フローの存在を調べたいと思っていました:)