3

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

仍然触发错误。

4

3 回答 3

2

问题是我们不支持{{#if isChecked }} checked {{/if}}。您不能#if在 HTML 标记内使用块助手(包括 );您必须编写一个返回适当字符串的帮助程序。

于 2013-01-03T00:30:08.690 回答
1

事实证明,这与 Meteor 中的一个错误有关。在修复错误之前,有一个简单的解决方案:

通过进入 post_edit.js 并将 Meteor.users.find() 替换为 Meteor.users.find().fetch(),使 SELECT 中的 #each 不响应。

感谢@dgreensp

于 2013-02-11T02:01:58.793 回答
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}}
于 2013-01-14T13:01:06.837 回答