如何使用Meteor中的#each块实现最后一项的条件?

时间:2014-04-13 13:19:52

标签: javascript meteor each spacebars meteor-helper

我已将我的meteor应用程序升级到0.8.0,现在把手自定义帮助程序已停止工作,帮助程序允许我在最后一项附加到列表时改变行为,是否有人知道我是怎么做的可以让车把助手再次工作,或者我如何使用最新版本的meteor来使用此功能,谢谢!

帮助代码(Original Link)

Handlebars.registerHelper("foreach", function(arr, options){

  if(options.inverse && !arr.length)
    return options.inverse(this);

  return arr.map(function(item, index){
    item.$index = index;
    item.$first = index === 0;
    item.$last  = index === arr.length - 1;
    return options.fn(item);
  }).join('');
});

2 个答案:

答案 0 :(得分:2)

Meteor已将Handlebars名称空间迁移到UI

UI.registerHelper("foreach", function(arr, options){
  return arr.map(function(item, index){
    item.$index = index;
    item.$first = index === 0;
    item.$last  = index === arr.length - 1;
    return options.fn(item);
  }).join('');
});

答案 1 :(得分:0)

我几乎已经编写了自己的帮助函数,它可能不是最适合我的解决方案(现在!)

eachLastItem = function (arr){
  if(arr.length > 0){
    if(typeof arr[0] == "object"){
      var cnt = lastItem = 0;
      _.each(arr, function(obj){
        (cnt != arr.length - 1) ? lastItem = 0 : lastItem = 1;
        _.extend(arr[cnt], {__lastItem: lastItem});
        cnt++; });
    }else{
      var cnt = lastItem = 0;
      var newArr = [];
      _.each(arr, function(str){
        (cnt != arr.length - 1) ? lastItem = 0 : lastItem = 1;
          var newObj = {
            str: str,
            __lastItem: lastItem }
          newArr.push(newObj);
        cnt++;
      });
      arr = newArr;
    }
    return arr;
  }else{
    return null;
  }
}

在模板中,我使用了这个:

{{#each array}}
  <li>{{str}}</li>
  {{#if __lastItem}}
    {{!  }}
  {{else}}
  {{/if}}
{{/each}}