我有一个嵌入的BorderContainer,当标记在主页面内时工作正常。当我移动带有模板的小部件内的边框容器标记时,出现了一些问题,边框容器将其左上角的所有子容器放置在彼此的顶部。
下面是一个极简主义的片段,显示了这个问题:http://embed.plnkr.co/cngYmG6BMKcUxwKQy2Du/
当我在本地运行dojo版本1.12.1时,也会发生同样的事情
你能告诉我我错过了什么吗?
我有一个嵌入的BorderContainer,当标记在主页面内时工作正常。当我移动带有模板的小部件内的边框容器标记时,出现了一些问题,边框容器将其左上角的所有子容器放置在彼此的顶部。
下面是一个极简主义的片段,显示了这个问题:http://embed.plnkr.co/cngYmG6BMKcUxwKQy2Du/
当我在本地运行dojo版本1.12.1时,也会发生同样的事情
你能告诉我我错过了什么吗?
3条答案
按热度按时间oogrdqng1#
您可以让它工作,但是您必须自己将调整大小请求转发到BorderContainer。
需要记住的一个规则是,如果Dojo布局小部件只有一个子小部件,那么它们将调用resize;如果有多个小部件,那么它不知道给每个小部件给予多少空间,它会举手示意,让您来计算大小。
为模板中的BorderContainer指定一个附加点名称
data-dojo-attachpoint="bc"
,然后重载resize方法并转发resize请求。这里假设BorderContainer是唯一值得调整大小的东西,也就是说,它占用了小部件的所有空间。
既然你现在是在你的孩子上调用resize,你的行为就像一个布局小部件,所以你也应该定义
isLayoutContainer
,如图所示。resize API没有很好的文档记录,isLayoutContainer更是如此。没有它,当你的窗口大小改变时,你可能会注意到额外的resize调用。如果稍后在边框容器上方或下方创建内容,则需要相应地调整changeSize.w和changeSize. h,这在
myWidget.resize()
这样的调用中会变得更加困难,因为myWidget.resize()
没有提供changeSize和resultSize,您必须使用当前大小或以其他方式计算它。dojo/dom-geometry在这种情况下很有用。nzkunb0c2#
如dijit._WidgetsInTemplateMixin文档中所述...
dijit._WidgetsInTemplateMixin混合不支持将布局小部件添加为子级。特别是在调用子级的startup()和resize()时存在问题。
n6lpvg4x3#
正如刘易斯提到的,这不支持布局小部件作为子部件,我建议你使用编程方法,在主脚本中示例化小部件,如下所示:
您可以在这里找到定制的Plunker。