我正在创建一个简单的CMS,用户可以在其中创建博客并添加类别。我目前有一个'帖子'集合和一个'类别'集合。它完全按照我编写的方式工作,但似乎我必须编写大量代码才能使其工作。请参阅下面的功能:
display_posts.html
<template name="displayPostAdmin">
...
<ul class="category-choices">
{{#each categories}}
<li>
<input type="checkbox" name="category-{{name}}" class="category-option" value="{{name}}" {{isChecked ../categories}}/>
<label class="label inline" for="category-{{name}}">{{name}}</label>
</li>
{{/each}}
</ul>
...
</template>
因此,这将迭代类别集合并为每个类别创建一个新复选框。这是非常标准的。请注意{{isChecked ../categories}},它调用'isChecked'辅助函数,该函数获取传递给它的帖子类别(../categories)。请参阅下面的模板javascript
display_posts.js
Template.displayPostAdmin.helpers({
...
isChecked: function(categories){
if (categories){
for (var i=0; i<categories.length; i++){
if (this.name == categories[i])
return 'checked';
}
}
}
isChecked辅助函数传递一组存储在'Posts'集合中的类别。该函数使用for循环遍历数组,如果this.name(每个Category集合的类别名称)等于传递的数组中的任何项,则返回'checked'字符串。我希望它返回“已检查”,以便当用户拉出编辑帖子页面时,分配给帖子的任何类别都会显示为已经检查过。
我的问题:有没有一种更有效的方法可以解决这个问题?