任何人都可以帮助我在 Dijit 小部件上应用装饰器模式吗?
例如,给定一个FormA_Widget
显示带有一些输入文本和按钮的表单。这个想法是创建一个,它用更多的单选按钮、输入等FormB_Widget
“扩展”装饰它。FormA_Widget
我知道如何创建一个模板化的自定义小部件,以及如何“扩展”一个小部件,我需要知道如何在其中的FormB_Widget
某个位置“注入”模板FormA_widget
以添加所需的“decoration2.
提前致谢。
查看我创建的示例:http ://plnkr.co/edit/dGMJ8UBQ9dT3dGQPQSeu?p=preview
这是最简单的解决方案,但它需要在以下方面进行一些微小的更改FormA
:
FormA.js:
var FormA = declare([_WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin], {
templateString: template,
templateExtensionString: "" // <= add `templateExtensionString` property
});
FormA.html - 在小部件模板中添加templateExtensionString
占位符:
<div>
<div><!-- FormA markup --></div>
<div>${!templateExtensionString}</div>
<div><!-- FormA markup --></div>
</div>
注意:为防止_TemplatedMixin
在字符串中转义引号,请放置“!” 在完整的变量名之前。
现在您可以扩展FormA
:
var FormB = declare([FormA], {
templateExtensionString: template // FormB template (dojo/text!./FormB.html)
});
如果您无法修改FormA
,请查看我对带有确认按钮的 Dojo Dialog 的回答,并考虑在此处采用类似的策略。