假设您想使用异步函数进行渲染(解释为什么需要延迟对象),您可以使用如下内容:
function render(args) {
var def = $.Deferred();
// call async function to render, example using ajax
// if you could use ajax then you wouldnt need to create your own deferred
$.post(url,data)
.done(function (data) {
def.resolve(data);
})
.fail(function (e) {
def.reject(e);
});
// Return promise that can be used to capture success or failure of rendering
return def.promise();
}
render().done(function (data) {
// data has whatever was passed in resolve(data)
}).fail(function (e) {
// handle error
});
最大的问题是如何实现用于呈现 html 的异步函数。如果它可以用 ajax 完成,那么它就变成了一个微不足道的问题,因为 jquery ajax 函数返回一个延迟对象(参见示例中的 $.post)。
但是,如果渲染不是异步的,并且您想要的是在渲染完成后启动一个事件,那么它应该可以通过添加一个新的自定义事件来实现,该事件在您的渲染函数结束时触发,生成的 html 为一个参数/属性,如果你愿意的话,一个“afterRender”自定义事件。