Meteor Spacebars {{#each}} счетчик и первые/последние тесты

Есть ли способ реализовать следующую логику с пробелами Meteor?

Псевдокод, смесь Meteor и цикла for Django:

{{#each jobs}}
    {{>jobItem }}
    {#if not forloop.last }}<hr>{{/if}}
{{/each}}

person Michael Samoylov    schedule 11.11.2014    source источник
comment
Это должно быть изначально реализовано в Meteor — пожалуйста, проголосуйте за эту проблему. Канонический способ сделать это обсуждается на meteor-talk. .   -  person Dan Dascalescu    schedule 12.11.2014


Ответы (1)


К сожалению, {{each}} не делает index. Таким образом, вам нужно передать больше информации элементу, чтобы получить необходимую информацию. Например, это может поместить индекс в ваш возвращаемый объект как другое поле.

var returnArray = _.map(divisions, function(item, key) {
  return _.extend(item, {
    "index": key
  });
});

Учитывая, что вам просто нужен последний, вы можете просто добавить один атрибут к последнему в своих заданиях. Создайте вспомогательную функцию, которая просто возвращает что-то вроде

return _.extend(_.last(Jobs.find().fetch(), {"last": true})

Тогда вы можете просто иметь {{#if last}}{{else}}<hr>{{/if}}. Таким образом, все элементы, которые не имеют значения, получают hr, а тот, у которого есть последнее значение, не будет.

Вероятно, вы могли бы также позаботиться об этом в CSS.

hr:last-of-type { display: none }

Возможно, вам придется дважды проверить синтаксис этого.

person jefeman    schedule 11.11.2014
comment
Не могли бы вы добавить закрывающую скобку к '.extend(.last(Jobs.find().fetch() -›), {last: true})'? - person ivan133; 13.12.2014
comment
на самом деле строка с расширением, вероятно, даже неверна; Эта строка вернет только один объект, что, безусловно, не является предполагаемым поведением -> шаблон ожидает массив объектов - person Lukas1; 12.07.2015
comment
Теперь у each есть атрибут с именем @index. - person Hola Soy Edu Feliz Navidad; 03.01.2017