Prevent ajax race conditions when using routes by offering a callback that is run after the the routes have finished loading
This commit is contained in:
parent
8b03b683df
commit
9b8375cf2c
|
@ -1,17 +1,30 @@
|
||||||
OC.router_base_url = OC.webroot + '/index.php/',
|
OC.router_base_url = OC.webroot + '/index.php/',
|
||||||
OC.Router = {
|
OC.Router = {
|
||||||
|
loadedCallback: null,
|
||||||
|
// register your ajax requests to load after the loading of the routes
|
||||||
|
// has finished. otherwise you face problems with race conditions
|
||||||
|
registerLoadedCallback: function(callback){
|
||||||
|
if(this.routes_request.state() === 'resolved'){
|
||||||
|
callback();
|
||||||
|
} else {
|
||||||
|
this.loadedCallback = callback;
|
||||||
|
}
|
||||||
|
},
|
||||||
routes_request: $.ajax(OC.router_base_url + 'core/routes.json', {
|
routes_request: $.ajax(OC.router_base_url + 'core/routes.json', {
|
||||||
dataType: 'json',
|
dataType: 'json',
|
||||||
success: function(jsondata) {
|
success: function(jsondata) {
|
||||||
if (jsondata.status == 'success') {
|
if (jsondata.status === 'success') {
|
||||||
OC.Router.routes = jsondata.data;
|
OC.Router.routes = jsondata.data;
|
||||||
|
if(OC.Router.loadedCallback !== null){
|
||||||
|
OC.Router.loadedCallback();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
generate:function(name, opt_params) {
|
generate:function(name, opt_params) {
|
||||||
if (!('routes' in this)) {
|
if (!('routes' in this)) {
|
||||||
if(this.routes_request.state() != 'resolved') {
|
if(this.routes_request.state() != 'resolved') {
|
||||||
alert('wait');// wait
|
alert('To avoid race conditions, please register a callback');// wait
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!(name in this.routes)) {
|
if (!(name in this.routes)) {
|
||||||
|
|
Loading…
Reference in New Issue