假設你想使用異步函數(解釋爲什麼你需要延期對象)來渲染,你可以使用這樣的事情:
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