Fix for issue 2503 - User can't specify own error handling logic

- Added the following notifications to $.mobile.loadPage():

	- pagebeforeload
		- Triggered just before loadPage() attempts to dynamically load an external page.
		- Developers can prevent the default loading behavior by calling preventDefault() on the event. If preventDefault() is called, it is up to the developer to call resolve()/reject() on the deferred object passed within the data object (2nd arg to the event callback).

	- pageload
		- Triggered after an external page has been loaded and inserted into the document.

	- pageloadfailed
		- Triggered when the load of an external page fails.
		- Developers can prevent the default behavior (error dialog display) by calling preventDefault() on the event. If preventDefault() is called, it is up to the developer to call resolve()/reject() on the deferred object (2nd arg to the event callback).
This commit is contained in:
Kin Blas 2011-09-23 14:12:40 -07:00
parent fe35e36a16
commit 4f066b7e07

View file

@ -742,6 +742,18 @@
dupCachedPage = page;
}
var mpc = settings.pageContainer,
pblEvent = new $.Event( "pagebeforeload" ),
triggerData = { url: url, absUrl: absUrl, dataUrl: dataUrl, deferred: deferred, options: settings };
// Let listeners know we're about to load a page.
mpc.trigger( pblEvent, triggerData );
// If the default behavior is prevented, stop here!
if( pblEvent.isDefaultPrevented() ){
return deferred.promise();
}
if ( settings.showLoadMsg ) {
// This configurable timeout allows cached pages a brief delay to load without showing a message
@ -863,6 +875,12 @@
hideMsg();
}
// Add the page reference to our triggerData.
triggerData.page = page;
// Let listeners know the page loaded successfully.
settings.pageContainer.trigger( "pageload", triggerData );
deferred.resolve( absUrl, options, page, dupCachedPage );
},
error: function() {
@ -871,6 +889,19 @@
base.set( path.get() );
}
var plfEvent = new $.Event( "pageloadfailed" );
// Let listeners know the page load failed.
settings.pageContainer.trigger( plfEvent, triggerData );
// If the default behavior is prevented, stop here!
// Note that it is the responsibility of the listener/handler
// that called preventDefault(), to resolve/reject the
// deferred object within the triggerData.
if( plfEvent.isDefaultPrevented() ){
return;
}
// Remove loading message.
if ( settings.showLoadMsg ) {