varParseHelper.js 1.64 KB
define(['mUtil'], function (mUtil) {
	var v =  window.__meta__ && window.__meta__.varparser || { s: {}, t: {} }, sourcemap = v.s, targetmap = v.t, loadingmap = {};
	return {
		parse: function(callback){
			var that = this, requestmap = {};
			Object.keys(sourcemap).forEach(function(skey){
				var loaded = false;
				Object.keys(loadingmap).every(function(lkey) {
					if(lkey === skey){
						loaded = true;
						return false;
					}
					return true;
				});
				!loaded && Object.keys(targetmap).every(function(tkey) {
					if(tkey === skey){
						loaded = true;
						return false;
					}
					return true;
				});
				if(!loaded){
					requestmap[skey] = sourcemap[skey];
					loadingmap[skey] = sourcemap[skey];
				}
			});
			
			if(Object.keys(requestmap).length){
				var url = mUtil.getActionUrl("service.MobileCommon", { action: "parseVar" });
				mUtil.ajax(url, { requestmap: JSON.stringify(requestmap) }, function (result) {
					if(result.status == 1){
						if(window.__meta__.sessionKey){
							var varsStr = mUtil.replaceAttachUrl(JSON.stringify(result.data));
							$.extend(targetmap, JSON.parse(varsStr));
						}else{
							$.extend(targetmap, result.data);
						}
						Object.keys(result.data).forEach(function(key) {
							delete loadingmap[key];
						});
						that.render(callback);
					}else{
						mUtil.console.error(result.errMsg);
					}
				}, {type: "POST", dataType: "json"});
			}else{
				that.render(callback);
			}
		},
		render: function(callback){
			Object.keys(targetmap).map(function(key) {
				$("."+key).each(function(){
					$(this).before(targetmap[key]).remove();
				});
			});
			callback && callback();
		}
	};
});