History Manager : hash qui disparait
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
Code:
<a href='#' onclick="nav('11_2008')"> 11_2008 </a> <br/>
avec
Code:
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 );
}
} |
et bien ca ne marche pas
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
Code:
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> |
le fichier js associé
Code:
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)
} |