I just decided to solve this problem and the key is _uihooks! This will call the functions you want after changing the collection, and before Blaze decisively updates the DOM.
Not sure why you mixed Freemasonry and packaging into one. My solution here is strictly Packery.
bookingsProfileItem.js
var triggerPackeryLayout = function () {
var $container = $('#packery-layout');
$container.packery({
itemSelector: '.item',
gutter: 20,
columnWidth: 300
});
}
Template.bookingsProfileItem.onRendered(function() {
this.find('#packery-layout')._uihooks = {
insertElement: function(node, next) {
triggerPackeryLayout();
$('#packery-layout').append(node);
$('#packery-layout').packery('appended', node);
}
}
});
bookingsProfileItem.html
<template name="bookingsProfileItem">
<div class="item">
{{...}}
</div>
</template>
<div id="packery-layout">
{{#each properties}}
{{> bookingsProfileItem}}
{{/each}}
</div>
RainHaven Meteor UI Hooks Demo:
https://github.com/RainHaven/meteor-ui-hooks-demo/blob/master/simple-todos.js
Meteor v1.0.4, 2015-Mar-17 uihooks:
https://github.com/meteor/meteor/blob/master/History.md#blaze-2