我知道异步事物会改变上下文,我们需要使用闭包来使其工作,但我无法处理下一个示例:
var loadTemplate = function(options){
var def = $.Deferred();
$.ajax({
url: '/',
data: { id: options.id },
type: 'GET'
}).done(function(template){
// HERE template's id !== options.id
$('body').append(template);
def.resolve();
});
return def.promise();
};
我loadTempate
用不同的ID和几次打电话。但是第一个成功的ajax结果将具有加载template
,但不等于options.id
传递给它。
有什么想法吗?
更新
我有装载机:
var loader = function(){
var _load = function(options){
$.when(loadTemplate(options), loadAnotherStuff(options))
.done(function(res){
// a lot of work here
});
};
return {
load: _load
}
};
然后我从页面调用它:
Loader.load({ id: 1});
Loader.load({ id: 2});
Loader.load({ id: 3});