我正在编写一个缓存函数,它将不可见的内容加载到 DOM 中,以便可以正确计算 div 大小(包括图像)。一旦缓存完成,我正在使用 jQuery 的延迟对象来运行一个函数。
我遇到的问题是,一旦缓存功能完成,我无法弄清楚如何返回我的props对象。return props
底部的显然是我想要返回我的属性对象的地方,但它返回未定义,因为 _obj 函数在调用 return 时尚未完成。
我在底部附近的完整功能是正确记录道具对象(包括cacheHeight var),但我无法弄清楚如何从延迟函数返回道具对象。我想做类似的事情return _obj(content).done(complete);
,但显然返回的是延迟对象,而不是完整函数的返回。
cache : function(content) {
// Vars
var props;
// Deferred switch
var r = $.Deferred();
/*
* Cache object
*/
var _obj = function(content) {
cacheHeight = 0;
cache = document.createElement("div");
cache.style.visibility = "hidden";
$(cache).css("position", "fixed"); // prevents parent's size being affected
$(cache).append(content);
$(contentWrapper).append(cache);
children = $(cache).children();
// Image loader
var imgs = $(cache).find('img'),
img_length = imgs.length,
img_load_cntr = 0;
if (img_length) { //if the $img_container contains new images.
imgs.on('load', function() { //then we avoid the callback until images are loaded
img_load_cntr++;
if (img_load_cntr == img_length) {
remaining = children.length;
$.each(children, function(index, value) {
--remaining;
cacheHeight = cacheHeight + parseInt($(value).outerHeight(false));
if (remaining == 0) {
props = {
height : cacheHeight
}
r.resolve();
}
});
}
});
}
return r;
};
/*
* Return cached object data
*/
var complete = function () {
console.log(props); // Correctly logs props object
};
// Resolve when finished
_obj(content).done(complete);
console.log(props); // Logs props as undefined (not good)
// Return?!?!
return props;
}