0

我有一个名为render. 我的应用程序的许多松散耦合的组件都绑定到它,并且在事件触发后它们会重新呈现自己。

现在我想在所有渲染完成后执行一个函数(伪代码):

triggerEvent("render");

when(renderingComplete).then(alert("Hurray!"));

我怎样才能做到这一点?我需要在哪里创建/返回延期?

(另一件事可能会变得棘手:据我了解,函数需要返回一个deferred-object,但我的render()-functions 还需要返回 HTML 代码才能让我的渲染系统工作:-S)

4

1 回答 1

0

假设您想使用异步函数进行渲染(解释为什么需要延迟对象),您可以使用如下内容:

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”自定义事件。

于 2013-04-16T11:39:33.167 回答