我正在开发一个实现延迟的小脚本,并且遇到了一些代码,这些代码的行为与我期望的Javascript无关。
var dfd = $.Deferred()
, view = $.get("filename.tmpl");
$.get("filename.json")
.always(function (model) {
dfd.resolve(model);
});
$.when(view, dfd)
.done(function (view, model) {
// do stuff with view - even if there is no model
});
这样可以正常工作,但是当我重构它时它会停止工作:
var dfd = $.Deferred()
, view = $.get("filename.tmpl");
$.get("filename.json").always(dfd.resolve);
$.when(view, dfd)
.done(function (view, model) {
// do stuff with view - even if there is no model
});
我认为没有任何理由不这样做。该函数期望第一个参数是模型或未定义。
答案 0 :(得分:2)
执行此操作时:
$.get("filename.json").always(dfd.resolve);
而不是:
$.get("filename.json")
.always(function (model) {
dfd.resolve(model);
});
您将获得另一个作为this
方法的resolve()
指针传递的对象。第二个将在dfd
的上下文中调用它。第一个将它称为从$.get()
返回的延迟对象的上下文,这是不同的。
重要的是要记住,当传递回调dfd.resolve
时,只需获取指向该方法的指针。它不会设置将调用resolve
的上下文。这是在.always()
方法内部设置的。