我有一个嵌入的BorderContainer,当标记在主页面内时可以正常工作。当我使用模板移动窗口小部件内的边框容器标记时,出现问题,边框容器将其所有子项放在左上角的顶部。
这是一个显示问题的简约代码段: http://embed.plnkr.co/cngYmG6BMKcUxwKQy2Du/
当我使用dojo版本1.12.1
在本地运行时,会发生同样的事情请告诉我我错过了什么?
答案 0 :(得分:1)
您可以使用此功能,但您必须自行将调整大小请求转发给BorderContainer。
要记住的一条规则是,如果Dojo布局小部件具有单个子窗口小部件,则会调用resize。如果有多个小部件,它不知道给每个小部件留出多少空间,请举手向上,并由您决定尺寸。
为模板中的BorderContainer指定一个带有data-dojo-attachpoint="bc"
的附加点名称。然后重载resize方法并转发resize请求。
isLayoutContainer: true,
resize: function(changeSize, resultSize) {
this.inherited(arguments);
this.bc.resize(changeSize, resultSize);
}
这假设BorderContainer是唯一值得调整大小的东西,即占用小部件的所有空间。
由于您现在正在调用孩子的大小调整,因此您的行为类似于布局小部件,因此您还应该如图所示定义isLayoutContainer
。调整大小的API没有很好地记录,而且isLayoutContainer甚至更少。如果没有它,您可能会在窗口大小发生变化时注意到无关的调整大小调用。
如果您稍后在边框容器上方或下方创建内容,则需要相应地调整changeSize.w和changeSize.h。而且在myWidget.resize()
之类的调用中,这会变得更难,因为没有提供changeSize和resultSize,并且您必须使用当前大小或以其他方式计算出来。 dojo/dom-geometry在这种情况下很有帮助。
答案 1 :(得分:0)
正如https://jira.spring.io/browse/AMQP-666 ...
的文件中所述dijit._WidgetsInTemplateMixin mixin不支持将布局小部件添加为子级。特别是对孩子们的startup()和resize()调用存在问题。
答案 2 :(得分:0)
作为刘易斯提到这不支持布局小部件作为孩子, 我建议你使用程序化方法,通过在主脚本中实例化小部件,如下所示:
require(["dojo/_base/array",
'dojo/_base/declare',
"dojo/parser",
"dojo/on",
"myapp/MyWidget",
"dijit/layout/ContentPane",
"dijit/layout/BorderContainer",
'dojo/domReady!'],
function(array, declare, parser, on, MyWidget) {
console.log("b4 parse ....")
parser.parse().then(function() {
console.log("after parse ....");
//create your widget here
new MyWidget({}).placeAt("borderContainer3");
});
}
);
您可以在此处找到自定义的Plunker。