使用Backbone.LayoutManager进行Dust.js模板渲染

时间:2012-09-25 05:18:23

标签: javascript backbone.js coffeescript

让我详细说明我的设置: 我有预编译的dust.js模板,我想与Backbone.LayoutManager一起使用。

Backbone.LayoutManager使用以下配置:

Backbone.LayoutManager.configure
  manage: true
  fetch: (name) ->
    name

所以模板的名称通过fetch直接传递给渲染,我想像这样覆盖渲染:

render: (template, context) ->
  done = @async
  dust.render @template, context, (err, out) ->
    throw err if err
    done(out)

但是我不能用渲染做到这一点(大概是因为LayoutManager作者认为模板渲染是同步的)。

有谁知道我怎么能做到这一点?

1 个答案:

答案 0 :(得分:4)

您需要修改LayoutManger以处理模板的异步呈现。

执行此操作的方法之一是使用jQuery Deferred对象,其中对render的调用返回Deferred对象的实例,然后在调用{{1}时解析该对象库。

然后,修改Backbone.LayoutManager,以便继续对模板执行它想要的操作,直到Deferred对象得到解析。

Dust中的

render

然后你接受调用render的Backbone.LayoutManager中的方法,而不是使用render的返回做一些事情,你将那个“东西”附加到你传回的延迟的render: (template, context) -> dfd = $.Deferred() dust.render @template, context, (err, out) -> throw err if err done(out) dfd.resolve() return dfd; 处理程序。

done

我正在使用Marionette.js(以及它的异步变体)和灰尘,这就是我的核心 dfd = render(template, context) dfd.done(do_something_with_this_template); 方法:

render

(显然不使用coffeescript ......)