我在Telescope工作时遇到了一个奇怪的错误。目前,在帖子编辑页面上点击提交会多次触发此错误:
Exception from Meteor.flush: TypeError: Cannot read property 'parentNode' of null
我把它缩小到post_edit.html:
<div class="control-group post-form-category">
<label class="control-label">Category</label>
<div class="controls">
{{#each categories}}
<label class="radio inline">
<input id="category_{{_id}}" type="radio" value="{{name}}" name="category" {{#if isChecked }} checked {{/if}}/> {{name}}
</label>
{{/each}}
</div>
</div>
这是categories
帮手:
categories: function(){
return Categories.find();
}
如果删除两个{{#each}}循环(一个在.post-form.category中,另一个在.post-form-user中),则错误消失。知道发生了什么事吗?我对那些{{#each}}做错了吗?
更新
看起来问题似乎来自“已检查”属性。但即使做像
这样的事情<input type="radio" value="{{name}}" name="category" {{isChecked}} />
仍会触发错误。
答案 0 :(得分:2)
问题是我们不支持{{#if isChecked }} checked {{/if}}
。您不能在HTML标记内使用块助手(包括#if
);你必须编写一个帮助器来返回相应的字符串。
答案 1 :(得分:1)
事实证明这与Meteor中的一个错误有关。在修复错误之前,有一个简单的解决方案:
通过进入post_edit.js并将Meteor.users.find()替换为Meteor.users.find()。fetch()来使SELECT中的#each无效。
感谢@dgreensp
答案 2 :(得分:0)
我没有在块帮助器中放置一个反应性模板,而是制作了一个自定义手柄帮助器,用于确定检查了哪个类别并插入一个字符串。
Handlebars.registerHelper('categoriesChecked', function (context, options) {
var ret="";
var i,k, len;
var docs = context.collection.docs;
var lineItem = {};
for (i in docs) {
lineItem.name = docs[i].name;
lineItem._id = i;
lineItem.isChecked = "";
for (k = 0, len = this.categories.length; k < len; k++) {
if (this.categories[k] == docs[i].name) {
lineItem.isChecked = "checked";
}
}
ret+= options.fn(lineItem);
}
return ret;
});
.html
{{#categoriesChecked categories}}
<label class="radio inline">
<input id="category_{{_id}}" type="radio" value="{{name}}" name="category" {{isChecked}} /> {{name}}
</label>
{{/categoriesChecked}}