2009-09-01 1 views
4

Я не могу понять, как сказать, что аккордеонконтейнер устанавливает высоту панели аккордеона в автоматическом режиме, чтобы высота панели была динамичной в зависимости от ее содержимого.Как сделать высоту dijit Аккордеонная динамика

В следующем коде я добавляю две панели к коннектору аккордеона. Один имеет высоту 10 пикселей, а другой - 90 пикселей, но в обоих случаях высота панели аккордеона вычисляется до 10 пикселей. Похоже, что он всегда поднимается на высоту первого.

var accordionContainer = new dijit.layout.AccordionContainer({'id':'accContainer'}).placeAt("test"); 
var accordPane = new dijit.layout.ContentPane({"title": "test", "content":"<div style='height:10px'>sdfsdfsdf</div&gt;"}); 
var accordPane2 = new dijit.layout.ContentPane({"title": "test1", "content":"<div style='height:90px'>sdfsdfsdf</div>"}); 

accordionContainer.addChild(accordPane); 
accordionContainer.addChild(accordPane2, 1); 
accordPane.startup(); 
accordPane2.startup(); 
accordionContainer.startup(); 
accordionContainer.selectChild(accordPane2); 

Я использую додзё 1.3.2

ответ

3

I Overrode Функция _getTargetHeight dijit.layout.AccordionContainer и всегда возвращает «авто» для высоты. Анимация скользящих окон будет работать некорректно, но это не так заметно.

_getTargetHeight: function(/* Node */ node){ 
// summary: 
//For the given node, returns the height that should be 
//set to achieve our vertical space (subtract any padding 
//we may have). 
//This is used by the animations. 

//var cs = dojo.getComputedStyle(node); 
//return Math.max(this._verticalSpace - dojo._getPadBorderExtents(node, cs).h, 0); 
return 'auto'; 
} 
0

попробуйте установить размеры на самом аккордеона контейнер до размера, который является достаточно большим, чтобы держать свое содержание плюс необходимые названия панели, например

#accContainer{ 
    height: 120px; 
    width: 200px; 
} 

Запуск() вызова в контейнере должен запускать дочерние панели для вас.

+0

Благодарим вас за ответ, но высота моего Аккордеонного Контейнера динамична, поскольку я не буду знать до времени выполнения, сколько панелей будет добавлено в контейнер. – pacman

3

В настоящее время это невозможно. Я написал блог/образец кода, чтобы объяснить, почему и как создать группу TitlePane о том, что расширить их естественной высоты (а не высоту контейнера для AccordionContainer):

http://www.sitepen.com/blog/2008/10/21/quick-fixes-and-dojo-support/

Это требует проведения один виджет TitleGroup (пользовательский, код в блоге) и размещение TitlePane внутри. Каждый из них ведет себя в основном как AccordionPane (с атрибутами title = "", возможностями загрузки href = "" и т. Д.) И делегирует заглавные щелчки для управления открытым/закрытым состоянием братьев и сестер.

+1

Спасибо, данте. Использование панелей заголовков, которые вы описываете в своем блоге, вероятно, правильно, но из-за ограничений по времени я решил расширить виджет AccordionContainer и переопределить его функцию _getTargetHeight и вернуть «auto» вместо фактической высоты. Пожалуйста, посмотрите мое решение ниже и прокомментируйте, если вы видите какой-либо побочный эффект от этого. Благодарю. – pacman

+0

Если это сработает для вас, хорошо. Единственное предостережение здесь заключается в том, что метод _getTargetHeight является «частным» методом (обозначается символом подчеркивания) и может потенциально меняться в будущем. Только публичные API _ всегда остаются на месте с политикой устаревания. Не говоря, что это изменится, только Диджиту разрешено изменить их. Существует потенциал, который вам понадобится, чтобы настроить патч для будущих версий Dojo/Dijit, чтобы разместить поведение. (или это может стать функцией, и функция может быть избыточной, кто знает, это «частный» :)) – dante

0

Теперь вы можете просто использовать dijit.TitlePane с без контейнера вообще. Вы можете передать open: false, когда вы создаете окна, чтобы начать их закрытие. Я думаю, что их включение в dojox.widget.TitleGroup будет эмулировать поведение, имеющее 1 открытый за раз.

Смежные вопросы