我想有这样一个递归模板:
<template name="generate">
{{#if elements}}
{{#each elements}}
<div>{{#if elements}}{{> generate}}{{/if}}</div>
{{/each}}
{{else}}
{{> generate elements=getElements}}
{{/if}}
</template>
与帮助:
Template.generate.helpers({
getElements: function() {
return Elements.find()
}
})
和“元素”数据对象:
[{
_id : "fgQ4GHrrZGFFGWPZQ",
elements" : [{
_id : "hY8iAYJC4KBwGKN84",
elements : []
}]
},{
_id : "rtMNfaQYwqzNTYqoD",
elements : [{
_id : "p2wJeGdtiGMYBQtpW",
elements : []
}]
}]
我遇到一个问题,键盘事件不响应和其他功能停止工作。 是模板不是设计来处理这种递归的? 如果是的话,我会尝试不同的方法,但我想这会的工作,虽然。 任何人看到这或有什么建议? 谢谢!
编辑:这会奏效。 我的问题是建立在其上引起我提到的问题(模板被渲染每次)“绘制的”回调这是被称为不止一次键盘事件处理程序。 我会删除这个问题,但StackOverflow上。 谢谢everybuddy!
在这里你有一些错误。
第一。 你有一个帮手命名getElements
和你喜欢叫它elements
其次您呼叫的模板到同一个模板{{> generate}}
<template name="generate">
{{#if elements}}
{{#each getElements}}
<div>{{#if elements}}{{> anotherTemplateName}}{{/if}}</div>
{{/each}}
{{else}}
{{> generate elements=getElements}}
{{/if}}
</template>
另外,如何elements
帮手神色? {{#if elements}}
有人建议将在这里使用嵌套的模板。
<template name="generate">
{{#if elements}}
{{> generateExample}}
{{else}}
{{> generate elements=getElements}}
{{/if}}
</template>
<!-- Generate Example Template -->
<template name="generateExample">
{{#each getElements}}
<div>{{#if elements}}{{> anotherTemplateName}}{{/if}}</div>
{{/each}}
</template>
看看这个谅解Spacebars一个更好的学习经验
不同于使用Javascript, Spacebars认为空数组[]
是falsy 。 因此初始{{#if elements}}
在叶节点(其具有elements: []
将是假的,触发{{> generate elements=getElements}}
这最终会导致无限递归。
你可以通过删除解决这个{{#if}}
完全,然后调用{{> generate elements=getElements}}
当您最初包括generate
:
<body>
{{> generate elements=getElements}}
</body>
<template name="generate">
{{#each elements}}
<div>{{#if elements}}{{> generate}}{{/if}}</div>
{{/each}}
</template>