How do I return a promise from my plugin
Hello. Ihave written a jQuery plugin and want to return a promise once it has finishedloading so that I can do some other stuff. I found a useful link
here and tried to replicate the code but to no avail. Please can you help - I am pretty new to both plugins andpromises.
The code I use to initiate the plugin is:
The cut down version coded for the plugin is:
(function() {
// custom workflow class
$.fn.stats = function(options) {
var def = $.Deferred();
var stat;
var defaults = {
//my defaults go here
};
var settings = $.extend(true, defaults, options); // extend (i.e. merge) defaults with options passed across when plugin is invoked
var deferredList = [];
//Apply to each instance of the plugin
this.each(function() {
var innerDef = $.Deferred();
deferredList.push(innerDef.promise());
positionIt(this);
addContainer(this);
updateSettings(this);
stat = $(this).find("div.stat_plugin"); // reference for this plugin
$.when ( loadPluginContent() ).done(function(result) {
if(result === "success") {
console.log("Plugin html successfully loaded for index " + settings.index); // get count of stats plugins loaded on the page
setSize();
setDOMElements();
setUpEvents();
$.when( loadStatsChart_Table() ).done(function(result){
innerDef.resolve(result);
});
} else {
alert ("There was an error loading the plugin content for " + settings.index);
}
});
});
$.when.apply($, deferredList).done(function() {
def.resolve("Done");
console.log("def resolved");
});
return def.promise();
function loadPluginContent () {
var dfd = $.Deferred();
stat.load(settings.url, function(responseText, statusText, xhr) {
dfd.resolve(statusText)
});
return dfd.promise();
}
function loadStatsChart_Table() {
var dfd = $.Deferred();
// do some stuff here
dfd.resolve('Plugin loaded successfully for ' + settings.index);
return dfd.promise();
}
// other private functions go here, such as: positionIt, addContainer and updateSettings
};
}) (jQuery);
The console log outputs the following:
"undefined
Test 1
undefined
Test 2
def resolved
def resolved "
The def.resolve("Done") code in the $.when.apply... function isn't being returned.
Please help!