我将整个函数粘贴在这里,顺便说一下,我在这个脚本中使用了 mustache 模板库,但这在问题中不是必需的:
tmplReplaceContent : function(json, tmpl, target){
var regex = new RegExp("\{{[a-zA-Z\.\_]*\}}");
var template = '';
var view = '';
/* json -> check if object */
if (typeof json == 'object') {
view = json;
if(!regex.test(tmpl)){
/* get mustache tmpl from the path */
$.get(msi.vars.tmpl_url + tmpl + '.mustache', function(tmplOut){
template = tmplOut;
var content = Mustache.render(template, view);
$(target).html(content).hide().fadeIn();
});
} else {
template = tmpl;
var content = Mustache.render(template, view);
$(target).html(content).hide().fadeIn();
}
} else {
/* getJSON from the path */
$.getJSON(msi.vars.base_url + json, function(jsonOut){
view = jsonOut;
if(!regex.test(tmpl)){
/* get mustache tmpl from the path */
$.get(msi.vars.tmpl_url + tmpl + '.mustache', function(tmplOut){
template = tmplOut;
var content = Mustache.render(template, view);
$(target).html(content).hide().fadeIn();
});
} else {
template = tmpl;
var content = Mustache.render(template, view);
$(target).html(content).hide().fadeIn();
}
});
}
我无法缩短它并删除重复的代码,因为我无法在 Ajax 成功中分配局部变量,因为它是异步的。我在互联网上徘徊了大约 15 个小时。但仍然没有运气。
我怎样才能删除重复的代码并使这个东西更短?