在Meteor 0.7及更早版本中,我有一个广义的条件#withif
块帮助器,它结合了#if
和#with
块帮助器:它呈现了一些内容,其中数据上下文设置为对象中的问题何时存在,如果它不存在,则使用默认数据上下文:
Handlebars.registerHelper "withif", (obj, options) ->
if obj then options.fn(obj) else options.inverse(this)
模板中的用法如下所示,其中doc
有一个字段foo
:
{{#withif doc}}
{{> doSomethingWith foo}}
{{else}}
Document doesn't exist!
{{/withif}}
在Meteor 0.8中,这似乎是much more convoluted to do。基本上,我希望这个块帮助器在UI.contentblock
和UI.elseblock
之间进行选择,并根据引用的对象是否存在于上下文中来适当地设置数据上下文。什么是最干净的方法?
我知道我可以将其解构为
{{#if this}}
{{> UI.contentBlock this}}
{{else}}
{{> UI.elseBlock}}
{{/if}}
然而,我在Meteor 0.7及更早版本中避免了这种情况,因为与上面的助手相比,不必要的性能损失。如果可以证明Blaze中的速度没有变慢,我会很乐意坚持下去(我知道Blaze会生成渲染代码)。