假设你想使用异步函数(解释为什么你需要延期对象)来渲染,你可以使用这样的事情:
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”自定义事件。
你可以返回一个像{content:html,promise:referedObject.promise()}这样的对象,但是被引用的对象会说什么?渲染完成了吗?你将无法同时返回承诺和结果,请澄清你的问题。 – cernunnos
确切地说,延迟对象表示渲染已完成。这也是我认为它可能会变得棘手的原因。 – kraftwer1