Вход

Просмотр полной версии : jQuery UI Layout


Amiga
24.05.2009, 18:51
Подскажите, пожалуйста, как в примере http://layout.jquery-dev.net/demos/saved_state.html прочитать текущие сохраненные аттрибуты панелей (размер, статус) и вывести их на экран, напр. в центральной панели. Если можно конкретный код (что куда вставить), я новичок в javascript...
Чего-то у меня ничего не получается.

x-yuri
25.05.2009, 01:47
var myLayout = $('body').layout();
var is_west_open = myLayout.state.west.isOpen;
var north_size = myLayout.state.north.size;

Amiga
25.05.2009, 02:28
А как вывести значение этих переменных на экран?

В том примере вставляю так:

var is_west_open = myCustomLayoutName.state.west.isOpen ;
var north_size = myCustomLayoutName.state.north.size ;

document.write( north_size );

Результат:
'myCustomLayoutName.state' - есть null или не является объектом

x-yuri
25.05.2009, 03:00
А как вывести значение этих переменных на экран?
куда на экран? В диалоговом окне:
alert( north_size );
в div с id="screen":
document.getElementById('screen').innerHTML = north_size;

Amiga
25.05.2009, 03:17
var myLayout = $('body').layout();
var north_size = myLayout.state.north.size ;

alert( north_size );
Результат в окне Undefined!
Почемуже не выводится текущий размер панели?

x-yuri
25.05.2009, 03:21
приведи код всей странички

Amiga
25.05.2009, 03:23
ссылка в первом посте. Вставил только под body код выше.

Amiga
25.05.2009, 14:11
Вот простейшая страница:

<html>
<head>
<script src="js/jquery.js"></script>
<script src="js/jquery.layout.js"></script>
<script src="js/jquery.layout.state.js"></script>
<script>
$(document).ready(function () {
$('body').layout({ applyDefaultStyles: true });
});
</script>
</head>
<body>
<div class="ui-layout-center">Center

<script>
// init instance var
var myLayout = $('body').layout();

// read layout 'options'
var is_west_resizable = myLayout.options.west.resizable;
var north_maxHeight = myLayout.options.north.maxSize;

var state = myLayout.state;

// get layout 'state'
var is_west_open = myLayout.state.west.isOpen;
var north_size = myLayout.state.north.size;

// current state
var isWestPaneOpen = !state.west.isClosed;
var isSouthPaneHidden = state.south.isHidden;
var isEastPaneSliding = state.east.isSliding;

// current dimensions
var westCurrentSize = state.west.size;
var westMinimumSize = state.west.minSize;
var containerInnerWidth = state.container.innerWidth;
var containerPaddingLeft = state.container.paddingLeft;

alert ( north_size );

</script>

</div>
<div class="ui-layout-north">North</div>
<div class="ui-layout-south">South</div>
<div class="ui-layout-east">East</div>
<div class="ui-layout-west">West</div>

</body>
</html>


Результат тот же - Undefined!
В чем ошибка?
Нормально выводятся только layout options.

Amiga
25.05.2009, 22:05
Разобрался в вопросе, переговорив с автором. Может кому поможет...
Оказывается панели layout должны уже существовать с соответствующими присвоенными классами до инициализации, напр. в виде div'ов или iframe и др. Они не создаются автоматически при инициализации. Вот такой код работает:
<html>
<head>
<script src="js/jquery.js"></script>
<script src="js/jquery.layout.js"></script>
<script src="js/jquery.layout.state.js"></script>
<script src="js/complex.js"></script>

<script>
$(document).ready(function () {
$('body').layout({ applyDefaultStyles: true
});
});
</script>
</head>
<body>
<div class="ui-layout-center">Center
<div id="screen">
</div>
</div>
<div class="ui-layout-north">North</div>
<div class="ui-layout-south">South</div>
<div class="ui-layout-east">East</div>
<div class="ui-layout-west">West</div>
<script>
// init instance var
var myLayout = $('body').layout();

var state = myLayout.state;

// current dimensions
var westCurrentSize = state.west.size;

//debugData( myLayout.state.west, 'West State' );
document.getElementById('screen').innerHTML = westCurrentSize;
</script>

</body>
</html>

Для отладки есть удобная функция в complex.js, которая показывает состояние всех объектов и их параметров
debugData( object[.branch[.branch]] [, dialog-title] );
напр.
debugData( myLayout.state.west, 'West State' );
debugData( myLayout.state, 'ALLStates' );

x-yuri
25.05.2009, 23:44
firebug намного удобнее ;)

Amiga
26.05.2009, 00:42
Согласен. Но для новичков (это я :)) просто и понятно. Кроме того, предпочитаю тест и отладку в IE, как самом распространенном и глючном...

x-yuri
26.05.2009, 00:49
а ты пробовал firebug пользоваться? Там тоже все просто и понятно + удобнее
но мое дело предложить...

Amiga
26.05.2009, 01:20
Конечно удобнее! Я не спорю. Именно им с этой проблемой и разбирался.
Но вот в одной моей комбинации вдруг вывод в FF заработал, а IE8 упал напрочь!
Поэтому все-равно приходится тестить и отлаживать в IE.
Спасибо тебе за подсказки.