Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   jQuery UI Layout (https://javascript.ru/forum/jquery/3794-jquery-ui-layout.html)

Amiga 24.05.2009 18:51

jQuery UI Layout
 
Подскажите, пожалуйста, как в примере 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 намного удобнее ;)


Часовой пояс GMT +3, время: 01:17.