Bonjour
Voilà j'essai de me servir de l'api History Manager de yui,
je suis parti de l'exemple http://developer.yahoo.com/yui/examp...-calendar.html
et j'essai de rajouter 3 liens plus bas pour atteindre des dates spécifiques
ainsi j'ai crée des <a href > du genre
avec
Code : Sélectionner tout - Visualiser dans une fenêtre à part <a href='#' onclick="nav('11_2008')"> 11_2008 </a> <br/>
et bien ca ne marche pas
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 function nav(num) { var currentState = YAHOO.util.History.getCurrentState( "calendar" ); label = num; if ( label != currentState ){ YAHOO.util.History.navigate( 'calendar', label ); } }
si je lance sans le mode debugger, j'arrive dans la méthode enregistrée dans le YAHOO.util.History.register( "calendar", initialCalendarState, register);
avec un état qui est à l'état initial
soit je lance en debugger, et là le pas à pas me fait constater que le hash de l'url est dans un premier temps bien mis a jour. Mais une fois la méthode nav terminée, le hash est remis à vide (et là je sais pas du tout pourquoi, il passe dans aucun top.location.hash
et c'est à ce moment que la thread d'yui détecte le changement du hash, rejout le register, et donc me remet à l'état initial.
Je sais pas si je suis très clair, mais là je comprend vraiment pas trop ce qui se passe.
Je vous met mon code, si quelqu'un qui a déja utilisé l'history manager pouvait jeter un oeil
je viens de remarquer que tout marche bien sous ie. c'est bien sous firefox que j'arrive à rien.
merci
l'index.html
le fichier js associé
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <title>Calendar Control</title> <style type="text/css"> body { margin:0; padding:0; } </style> <link rel="stylesheet" type="text/css" href="/js/yui/fonts/fonts-min.css" /> <link rel="stylesheet" type="text/css" href="/js/yui/calendar/assets/skins/sam/calendar.css" /> <script type="text/javascript" src="/js/yui/yahoo-dom-event/yahoo-dom-event.js"></script> <script type="text/javascript" src="/ js/yui/calendar/calendar.js"></script> <script type="text/javascript" src="/js/yui/history/history-beta.js"></script> <script language="JavaScript1.1" type="text/javascript" src="js/../jsp/test.js"></script> <!--there is no custom header content for this example--> </head> <body class=" yui-skin-sam"> <!--BEGIN SOURCE CODE FOR EXAMPLE =============================== --> <script> init(); </script> <div id="container"> <div id="calendarContainer"></div> </div> <a href='#' onclick="nav('11_2008')"> 11_2008 </a> <br/> <a href='#' onclick="nav('11_2009')"> 11_2009 </a> <br/> <a href='#' onclick="nav('11_2010')"> 11_2010 </a> <br/> <a href='#' onclick="nav('11_2011')"> 11_2011 </a> <br/> <!--END SOURCE CODE FOR EXAMPLE =============================== --> <div id="divTest"> en attente </div> </body> </html>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60 function nav(num) { var currentState = YAHOO.util.History.getCurrentState( "calendar" ); label = num; var b if ( label != currentState ){ b = YAHOO.util.History.navigate( 'calendar', label ); } document.getElementById("divTest").innerHTML = "page : " + num; } function register( state ){ alert("register : " + state); calendar.cfg.setProperty( "pagedate", state.replace( "_", "/" ) ); calendar.render(); } function init() { // The initial month will be chosen in the following order: // // URL fragment identifier (it will be there if the user previously // bookmarked the application in a specific state) // // or // // today's corresponding month (default) var today = new Date(); var defaultCalendarState = ( today.getMonth() + 1 ) + "_" + today.getFullYear(); var bookmarkedCalendarState = YAHOO.util.History.getBookmarkedState( "calendar" ); var initialCalendarState = bookmarkedCalendarState || defaultCalendarState; var calendar; YAHOO.util.History.register( "calendar", initialCalendarState, register); YAHOO.util.History.onLoadEvent.subscribe(subscribe); YAHOO.util.History.initialize(); } function subscribe() { var currentState = YAHOO.util.History.getCurrentState( "calendar" ); var startDate = { pagedate: currentState.replace( "_", "/" ) }; // Instantiate the calendar control... calendar = new YAHOO.widget.Calendar( "calendar", "calendarContainer", startDate ); calendar.beforeRenderEvent.subscribe( handleCalendarBeforeRender, calendar, true ); calendar.render(); } function handleCalendarBeforeRender() { var calDate = calendar.cfg.getProperty( "pageDate" ); var pageDate = ( calDate.getMonth() + 1 ) + "_" + calDate.getFullYear(); nav(pageDate) }
Partager