How to get the parent template instance (of the current template)

Bogdan D picture Bogdan D · Jan 14, 2015 · Viewed 8.7k times · Source

Is there a clean way to get the parent template of the current template? Nothing is officially documented in Meteor's API. I'm talking about the Blaze.TemplateInstance, not the context (i.e. not Template.parentData).

Answer

Bogdan D picture Bogdan D · Jan 15, 2015

In the end, I've extended the template instances similarly with Meteor's parentData, like this:

/**
 * Get the parent template instance
 * @param {Number} [levels] How many levels to go up. Default is 1
 * @returns {Blaze.TemplateInstance}
 */

Blaze.TemplateInstance.prototype.parentTemplate = function (levels) {
    var view = this.view;
    if (typeof levels === "undefined") {
        levels = 1;
    }
    while (view) {
        if (view.name.substring(0, 9) === "Template." && !(levels--)) {
            return view.templateInstance();
        }
        view = view.parentView;
    }
};

Example usage: someTemplate.parentTemplate() to get the immediate parent