var config = {
json: {
baseUrl: "/some/url/$",
getter: $.getJSON,
validator: $.isPlainObject
},
template: {
baseUrl: "/some/url/$.mustache",
getter: $.get,
validator: function (str) {
return (/\{\{[a-zA-Z._]*\}\}/).test(str);
}
}
};
function getItem(itemOrName, type) {
var result = $.Deferred(), cfg = config[type];
if (cfg.validator(itemOrName)) {
result.resolve(itemOrName);
} else {
cfg.getter(cfg.baseUrl.replace("$", itemOrName))
.done(function (data) { result.resolve(data); })
.fail(function (xhr) { result.reject(xhr); });
}
return result.promise();
}
var foo = {
tmplReplaceContent: function (json, tmpl, target) {
$.when(getItem(json, "json"), getItem(tmpl, "template"))
.done(function (json, tmpl) {
var content = Mustache.render(tmpl, json);
$(target).html(content).hide().fadeIn();
})
.fail(function (xhr) {
// show error message
});
}
};