任何人都可以帮我在Dijit小部件上应用装饰器模式吗?
例如,给定FormA_Widget
显示带有一些输入文本和按钮的表单。
我们的想法是创建一个FormB_Widget
,“扩展”FormA_Widget
用更多单选按钮,输入等装饰它。
我知道如何创建模板化自定义窗口小部件以及如何“扩展”窗口小部件,我需要知道如何在{{1}内的某个位置“注入”FormB_Widget
模板添加所需的“decoration2。
提前致谢。
答案 0 :(得分:1)
查看我创建的示例: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>
N.B。:为防止_TemplatedMixin
在字符串中转义引号,请放置“!”在完整的变量名之前。
现在您可以扩展FormA
:
var FormB = declare([FormA], {
templateExtensionString: template // FormB template (dojo/text!./FormB.html)
});
如果您无法修改FormA
,请查看我对Dojo Dialog with confirmation button的回答,并考虑采用类似的策略。