Meteor.flush的异常:TypeError:无法读取null的属性'parentNode'

时间:2013-01-01 09:30:43

标签: javascript meteor

我在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}} />

仍会触发错误。

3 个答案:

答案 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}}