如何使用空格键 #if 标签获取第一个集合元素?

Posted

技术标签:

【中文标题】如何使用空格键 #if 标签获取第一个集合元素?【英文标题】:How Do I Get First Collection Element Using Spacebars #if Tag?如何使用空格键 #if 标签获取第一个集合元素? 【发布时间】:2014-10-07 04:33:43 【问题描述】:

我正在尝试将第一张图片设置为引导轮播中的“活动项目”。那么,有没有办法让集合中的第一个元素与其他元素不同?

      #each pictures
        #if @first
              <div class="item active">
                 <img src="/pictures/fileName"  />
            </div>
       else
          <div class="item">
             <img src="/pictures/fileName"  />
          </div>
       /if
     /each

渲染的页面只显示 else 语句中的内容。 曾尝试使用 if @first,但它对我不起作用。

【问题讨论】:

【参考方案1】:

这与needing an index in your template 的问题非常相似。您需要映射pictures 并标记您需要区别对待的那个。例如:

Template.myPictures.helpers(
  pictures: function() 
    return Pictures.find().map(function(picture, index) 
      if (index === 0)
        picture.isFirst = true;

      return picture;
    );
  
);

然后您可以像这样在模板中使用isFirst

#each pictures
  #if isFirst
    <div class="item active">
      <img src="/pictures/fileName"  />
    </div>
  else
    <div class="item">
      <img src="/pictures/fileName"  />
    </div>
  /if
/each

请注意,CoffeeScript 的 @ 在模板中不起作用。要了解有关模板上下文的更多信息,请参阅this。

【讨论】:

好主意!当 Bootstrap 更改活动项然后光标更新时会发生什么?空格键是否尊重更改? 认为我会再次将第一项标记为活动。对于常规游标,情况并非如此,但因为我们使用的是map,所以我不确定,因为 blaze 最近改变了类的保存方式。您需要尝试一下,看看会发生什么。如果您可以捕捉到更改哪个图片处于活动状态的事件,您可以更改一些内部状态,然后在地图中使用该状态。当可以删除图片时,这会变得很棘手。您需要考虑所有情况并明确定义行为。【参考方案2】:

这不是您所要求的,但您可以在 rendered 回调中使用 jQuery 制作第一项 active

Template.myPictures.rendered = function () 
  this.$('.item').first().addClass('active');
;

【讨论】:

是的,这可能也不错,前提是在模板渲染时图片实际上已经准备好了(例如,使用了waitOn)。 这个解决方案也有效。如此专注于车把,以至于我没有想到任何其他解决方案.. 谢谢!

以上是关于如何使用空格键 #if 标签获取第一个集合元素?的主要内容,如果未能解决你的问题,请参考以下文章

jquery如何获取第一个或最后一个子元素?

jquery如何获取ul中第一个li和最后一个li

如何获取 List 或 Set 的第一个元素? [复制]

如何获取jQuery集合的某一项

Js 中如何判断 获取到的是一个标签?

如何利用JavaScript语言获取Map集合中元素个数