让我详细说明我的设置: 我有预编译的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作者认为模板渲染是同步的)。
有谁知道我怎么能做到这一点?
答案 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 ......)