为啥嵌套在模板中的每个都不输出

Posted

技术标签:

【中文标题】为啥嵌套在模板中的每个都不输出【英文标题】:Why does nested each in template output nothing为什么嵌套在模板中的每个都不输出 【发布时间】:2016-05-08 21:36:41 【问题描述】:

虽然这是按预期呈现的:

#each Items  // a collection
  title  
/each  
#each types  // another ollection
  refId  
/each  

如果我把它放在一起:

#each Items  
  title  
  #each types  
    refId  
  /each 
/each 

#each types 为空。

模板助手:

Template.menuItems.helpers(
    restMenuItems: function() 
        return RestMenuItems.find(restRefId: this._id, sort:Template.instance().sort.get());
    ,
    restMenuSideItems: function() 
        return RestMenuSideItems.find(restRefId: this._id,            sort:Template.instance().sort.get());
    
);

Template.menuItems.onCreated( function()
    this.subscribe('restMenuItems');
    this.subscribe('restMenuSideItems');
);

以及一些模板代码:

#each restMenuItems
  <div>
    <select class="list-group select_side_addons">
      #each restMenuSideItems
        <option>restRefId</option>
      /each
    </select>
  </div>
/each

即使将#each restMenuSideItems 替换为#each ../restMenuSideItems,也不会出现任何内容。

怎么了?

【问题讨论】:

【参考方案1】:

因为#each 子句将数据上下文更改为当前项。

如果您想在每个Items 中列出types,您可以使用.. 获取父数据上下文。

如果types 是父上下文的属性:

#each Items  
  title  
  #each ../types  
    refId  
  /each 
/each 

如果types 是模板助手,您可以将父上下文作为参数传递给它:

#each Items  
  title  
  #each types ..  
    refId  
  /each 
/each 

并为您的查询使用上下文。

Template.myTemplate.helpers(

  types: function(parent) 
    // you now have the parent context here.
    // use parent._id etc. where you used this._id in the
    // "flat" version.
  
);

【讨论】:

谢谢,但还是一样。 奇怪,应该可以。您能否提供更多代码(例如,您的助手和更完整的模板代码)? Itemstypes 来自哪里? 刚刚做了。 @MasterAM 每个里面有一个不同的集合,它不需要使用../,我猜是因为它们没有具有相同键的字段。 问题可能不在于它是相同/不同的集合,而在于它是使用数据上下文进行查询的助手。应该将父数据上下文作为参数传递。

以上是关于为啥嵌套在模板中的每个都不输出的主要内容,如果未能解决你的问题,请参考以下文章

为啥不能推导出嵌套在模板类中的枚举的模板参数?

一个for循环为啥能够把这个数组的每个值输出

嵌套字典 copy() 还是 deepcopy()? [复制]

为啥这段代码没有输出预期的结果?

刀片模板中的多对多关系中的 Laravel 嵌套查询

为啥在 innerHTML 中使用的 Array#map 输出中的额外逗号?