Дочерние элементы Dojo StackContainer не изменяют размер при развертывании / восстановлении браузера

У меня есть следующий вложенный макет в приложении dojo 1.4:

BorderContainer 1

-> Контейнер стека 1

-> -> BorderContainer 2

-> -> BorderContainer 3

Размер StackContainer составляет 100% по ширине и высоте. Когда я изменяю размер окна браузера с помощью максимизации / восстановления, StackContainer правильно изменяет размер до центральной области его родительского BorderContainer.

У меня проблема в том, что дочерние элементы StackContainer (BorderContainer 2 и 3) не меняют размер до contentBox StackContainer.

Есть ли что-то особенное, что нужно сделать, чтобы принудительно изменить размер дочерних элементов StackContainer? Я пробовал вызвать StackContainer1.resize (), но это не имеет значения.

Заранее спасибо.

Дополнительная информация:

Спасибо за ответ peller. Иерархия виджетов, содержащая StackContainer, на самом деле является настраиваемым виджетом, поэтому StackContainer фактически не находится в BorderContainer напрямую, но для его высоты и ширины явно установлено значение 100%. Это работает, и размер StackContainer изменяется правильно при максимальном увеличении браузера. Прямые дочерние элементы stackcontainer - это BorderContainer, и именно эти BorderContainer не изменяют размер при изменении размера StackContainer. Точная разметка:

<div dojoType="dijit.layout.StackContainer" style="height:100%;width:100%;">
    <div dojoType="dijit.layout.BorderContainer" gutters="false" style="height:100%;width:100%;padding:0;" id="bcWrongSize">
    </div>
</div>

Это BorderContainer 'bcWrongSize', размер которого не изменяется с родительским StackContainer. Встроенная высота и ширина, указанные в BorderContainer, заменяются явными размерами в пикселях в StackContainer. Однако при изменении размера браузера размер StackContainer изменяется до его родительского виджета правильно, но явные высота и ширина BorderContainer неверны. Первоначально вызывается метод макета в StackContainer, и он изменяет размер BorderContainer (являющегося видимым дочерним элементом). Однако размеры _contentBox, которые он передает BorderContainer, являются размерами StackContainer ДО его изменения размера. Ширина и высота, вычисленные dojo.marginBox, неверны (offsetWidth и offsetHeight - это размеры до того, как браузер развернул в максимальном масштабе). Может быть, эта проблема связана с тем, что StackContainer является subContainerWidget настраиваемого виджета и поэтому имеет 100% ширину и высоту?


person Andy    schedule 25.05.2010    source источник
comment
Ширина и высота не должны указываться в центральной области BorderContainer, только по сторонам / сверху / снизу. Если ваш StackContainer находится в центре, удалите ширину / высоту и посмотрите, имеет ли это значение. Да, он должен автоматически изменять размер StackContainer и дочерних элементов. Предположительно у вас есть другие вещи в ваших BorderContainers?   -  person peller    schedule 25.05.2010
comment
Спасибо за ответ peller. Я добавил дополнительную информацию выше.   -  person Andy    schedule 26.05.2010


Ответы (1)


У нас была похожая проблема на проекте. Ниже приведен фрагмент, который сработал для нас. Обратите внимание на использование региона для stackContainer (он находится в пограничном контейнере) и отсутствие высоты / ширины на внутренних пограничных контейнерах.

<div dojotype="dijit.layout.StackContainer" jsid="buttonStack" region="bottom" style="height: 180px">
      <div jsid="selectionButtons" dojotype="dijit.layout.BorderContainer" gutters="false">
           <div dojotype="dijit.layout.ContentPane" region="bottom">
                <button id="btnClearSelection" dojotype="dijit.form.Button" 
                     label="Clear Selection" disabled> </button>
                <button id="btnClearAll" dojotype="dijit.form.Button" 
                     label="Clear All" disabled> </button>
            </div>
      </div>
<div>
person Erin Stanfill    schedule 26.05.2010