#javascript #meteor
#javascript #метеор
Вопрос:
Я только начал работать над пакетом meteorite, который добавляет группы / заголовки в списки.
Смотрите демонстрацию здесь.
Исходный код для демонстрации здесь .
По сути, то, что я хочу сделать, это дождаться полного заполнения списка, а затем вызвать метод, который задает заголовки / группы и т.д. То, как я делаю это сейчас, — это вызов помощника handlebars после {{#each}}
цикла, например:
<ul>
{{#each listItems }}
{{> listItem }}
{{/each}}
</ul>
{{ groupList }}
Где groupList
помощник выполняет код, который я хочу запустить после запуска цикла (код, который задает заголовки).
Это выглядит довольно некрасиво, и то, что я думаю, я бы предпочел, это что-то вроде обратного {{#each}}
вызова цикла, который вызывается после завершения итерации (и, что важно, если элементы в цикле меняются).
Я думаю, что-то вроде метода rendered() для шаблонов.
(И я, конечно, уже пробовал метод rendered() , но он выполняется до запуска цикла.)
Существует ли такой обратный вызов? Или какой-либо другой метод, который был бы менее уродливым, чем тот, который я сейчас использую с помощником handlebars?
Ответ №1:
Вместо того, чтобы позволять Blaze отображать список, а затем использовать jQuery для добавления заголовков, вы могли бы выполнить группировку и заголовки в самом шаблоне, например:
<template name="grouped">
{{#each groups}}
<h2>{{heading}}</h2>
{{#each items}}
{{> item}}
{{/each}}
{{/each}}
</template>
Template.grouped.groups = function () {
return _.chain(ListItems.find().fetch())
.groupBy("wins")
.pairs()
.map(function (pair) {return {heading: pair[0], items: pair[1]};})
.value();
};
Мне это кажется более «стремительным» — императивные манипуляции с DOM, как правило, являются неправильным подходом в Meteor. Я не уверен, как сравнивается производительность.
Комментарии:
1. Спасибо, я думал о том, чтобы сделать что-то подобное, и я думаю, что это чище. Я попробую!