Search code examples
meteormeteor-blaze

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


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).


Solution

  • 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