Vor kurzem brauchte ich die gleiche Funktionalität in meiner App, also habe ich beschlossen, mein eigenes Paket zu erstellen, das diesen Job out of the box tun wird. Obwohl es noch in Arbeit ist, können Sie es ausprobieren.
Grundsätzlich ist das gesamte Verfahren ist wie folgt:
// Defines new method /extend
Template.prototype.copyAs = function (newTemplateName) {
var self = this;
// Creating new mirror template
// Copying old template render method to keep its template
var newTemplate = Template.__define__(newTemplateName, self.__render);
newTemplate.__initView = self.__initView;
// Copying helpers
for (var h in self) {
if (self.hasOwnProperty(h) && (h.slice(0, 2) !== "__")) {
newTemplate[h] = self[h];
}
}
// Copying events
newTemplate.__eventMaps = self.__eventMaps;
// Assignment
Template[newTemplateName] = newTemplate;
};
In Ihrer neuen Vorlage (new_template.js), in dem Sie Ihr Abstract ein verlängern möchten, schreiben Sie folgendes:
// this copies your abstract template to your new one
Template.<your_abstract_template_name>.copyAs('<your_new_template_name>');
Jetzt Sie können einfach Ihre Helfer oder Ereignisse überschreiben (in meinem Fall ist es photos
Helfer), indem Sie Folgendes tun:
Template.<your_new_template_name>.photos = function() {
return [];
};
Sie beziehen sich auf überschriebene Hilfsmethoden und auf abstrakte Methoden, die nicht überschrieben werden.
Beachten Sie, dass eine HTML-Datei für eine neue Vorlage nicht erforderlich ist, da wir ständig auf eine abstrakte Vorlage verweisen.
Der Quellcode ist auf Github here verfügbar!
Ich erstellte [ein Paket] (https://atmosphere.meteor.com/package/view) namens 'view' für Meteor. Ich benutze es, um Meteor-Ansichten mit einer Rückgrat-ähnlichen Sichtklasse zu umhüllen. Vielleicht findest du dort ein paar Ideen. – Andreas