Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dojo dijit嵌入的BorderContainer在模板内不起作用_Dojo_Dijit.layout - Fatal编程技术网

Dojo dijit嵌入的BorderContainer在模板内不起作用

Dojo dijit嵌入的BorderContainer在模板内不起作用,dojo,dijit.layout,Dojo,Dijit.layout,我有一个内嵌的BorderContainer,当标记位于主页面内时,它可以正常工作。当我将边框容器标记移动到带有模板的小部件中时,出现了一些问题,边框容器将其所有子项都放置在左上角的位置上 下面是一个简单的片段,它显示了问题: 使用dojo 1.12.1版在本地运行时也会发生同样的情况 你能告诉我我错过了什么吗 如……文件中所述 dijit.\u WidgetsInTemplateMixin mixin不支持将布局小部件添加为子项。尤其是对子对象的启动和调整大小调用存在问题 正如lewis提到

我有一个内嵌的BorderContainer,当标记位于主页面内时,它可以正常工作。当我将边框容器标记移动到带有模板的小部件中时,出现了一些问题,边框容器将其所有子项都放置在左上角的位置上

下面是一个简单的片段,它显示了问题:

使用dojo 1.12.1版在本地运行时也会发生同样的情况


你能告诉我我错过了什么吗

如……文件中所述

dijit.\u WidgetsInTemplateMixin mixin不支持将布局小部件添加为子项。尤其是对子对象的启动和调整大小调用存在问题


正如lewis提到的,它不支持布局小部件作为子部件, 我建议您使用编程方法,在主脚本中实例化小部件,如下所示:

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"); 

            }); 
         }
);

您可以在这里找到一个定制的。

您可以让它工作,但您必须自己将调整大小请求转发到BorderContainer

要记住的一条规则是,如果Dojo布局小部件有一个子小部件,它们将调用resize。如果有多个widget,它不知道给每个widget多少空间,那么就举手决定大小

为模板中的BorderContainer指定数据为dojo attachpoint=bc的附着点名称。然后重载resize方法并转发resize请求

isLayoutContainer:true, 调整大小:functionchangeSize,resultSize{ 这是继承的论据; this.bc.resizechangeSize,resultSize; } 这假设BorderContainer是唯一值得调整大小的东西,即占用小部件的所有空间

由于您现在正在对子级调用resize,所以您的行为就像一个布局小部件,所以您还应该定义isLayoutContainer,如图所示。ResizeAPI没有很好的文档记录,isLayoutContainer更是如此。如果没有它,当窗口大小更改时,您可能会注意到无关的调整大小调用


如果以后在边框容器上方或下方创建内容,则需要相应地调整changeSize.w和changeSize.h。对于像myWidget.resize这样的调用,如果不提供changeSize和resultSize,那么这会变得更加困难,您必须使用当前的大小,或者以其他方式计算它。在这种情况下很有帮助。

有一个高度问题,我认为这是由小部件声明性实例化引起的。你试过程序化实例化吗?没有,我没有试过程序化实例化。我刚刚发现了一个黑客作为解决办法;在setTimeout:内对嵌入的BorderContainer调用resize:。但我不希望依赖Dojo/Dijit中的另一种方法将标记分割成更小的文件,这些文件可以包含布局小部件?据我所知,没有任何支持。即使使用bRIMOs解决方案,您也可能会遇到“调整大小”事件问题,这可以通过丑陋的窗口调整处理程序来解决。理想情况下,您要么将所有布局装饰性地放在前面,要么将小部件中的布局替换为标准的“响应式”设计。@LewisM是的,但编程不需要调整大小事件!它被正确地渲染了,不是吗?谢谢刘易斯。对于a,在我的情况下并不适用,而对于b,dojo/dijit中对我有吸引力的是小部件,因为我正试图模拟桌面应用程序Tanks bRIMOs供您参考,布局确实很好,但当我在内容窗格中添加其他内容时,我对模板有其他问题,我想这与生命周期有关