我的JS有点生锈。我在
上遇到问题LaravelRoutes.route( 'route-name' );
在初始ajax完成之前在应用程序中被调用。
我希望能找到一种方法,将返回值推迟到routes
变量不再为null之前不做类似的事情;
LaravelRoutes.roue( 'route-name', [], function( uri ) {
});
反正有这样做吗?
致谢
var LaravelRoutes = new function() {
var routes = null;
/**
* Load JSON
* @param path
* @param success
* @param error
*/
var loadJSON = function( path, success, error )
{
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function()
{
if (xhr.readyState === XMLHttpRequest.DONE) {
if (xhr.status === 200) {
if (success)
success(JSON.parse(xhr.responseText));
} else {
if (error)
error(xhr);
}
}
};
xhr.open( "GET", path, true );
xhr.send();
};
/**
* Get Router
* @param name
* @param callback
* @returns {*}
*/
var getRouter = function( name, callback )
{
if( typeof routes[ name ] !== 'undefined' ) {
return callback( routes[ name ] );
} else {
console.log( 'route [' + name + '] does not exist' );
}
};
/**
* Generate Route Uri
* @param router
* @param _parameters
* @returns {string}
*/
var generateRouteUri = function( router, _parameters )
{
var parameters = _parameters || [];
router.uri_variables.forEach( function( variable ) {
var replaceWith = parameters.shift() || null;
router.path = router.path.replace( '{' + variable + '}', replaceWith );
});
return '/' + router.path;
};
loadJSON( window.routesUrl ? window.routesUrl : '/routes.json', function( data ) {
routes = data;
});
return {
route : function( name, parameters )
{
return getRouter( name, function ( router ) {
return generateRouteUri( router, parameters );
});
}
}
};