在BorderContainer中调整Dgrid

时间:2012-11-17 05:20:53

标签: dojo dijit.layout dgrid border-container

我在BorderContainer中有一个dgrid,启用了“liveSplitters”(使用Dojo 1.8)。 dgrid很好地出现了,但是当我在左列和“前导”列(dgrid在其中)之间移动拆分器时,dgrid没有正确调整大小。但是,如果我调整窗口大小,那么dgrid会重新调整到合适的大小(即填充BorderContainer的“前导”窗格的100%)。

我在CSS中将dgrid设置为100%宽度。有什么方法我需要告诉dgrid在拆分器移动后刷新它的大小?

2 个答案:

答案 0 :(得分:7)

看看这个例子,我写了一篇回答另一个dgrid相关问题:http://jsfiddle.net/phusick/VjJBT/

您正在寻找的CSS规则是:

#grid {
    position: absolute;
    top: 0;
    bottom: 0;
    left: 0;
    right: 0;
    height: auto;
}

编辑:我认为这可能是dgrid版本的问题,因此我将dgrid更新为最新版本0.3.3并为其创建了测试你的问题:http://jsfiddle.net/phusick/5mHTS/

嗯,这不是版本的问题,0.3.1和0.3.3都可以在调整BorderContainer时正常工作,但仅适用于Chrome和Firefox。我在IE9和Opera 12.10中重现了这个问题:

enter image description here

网格需要调用grid.resize()来正确调整大小,在调整BorderContainer时,IE9 / Opera中不会发生这种情况,但总是在调整窗口大小时发生。

DijitRegistry解决了这个问题,因为在调整大小时,布局组件(如BorderContainerContentPane)会在所有 dijit 子项上调用resize()

因此,子类DijitRegistrydojo/aspect在网格的父resize上侦听ContentPane并调用grid::resize()

aspect.after(contentPane, "resize", function() {
    grid.resize();
});

答案 1 :(得分:1)

正如对@phusick的回答的评论所指出的,如果我使用DijitRegistry mixin,Dgrid会正确调整大小。我也有一些其他的调整大小问题,但它们与我的css中的元素上设置相对宽度有关(例如100%)。如果我删除了ContentPanel不需要的大小,则所有元素都会调整大小。 CSS已经从Dojo 1.5继承而来,显然对于在CSS中设置了大小的ContentPanel没有做出同样的反应。