回答
我认为简单的答案是否定的,但这里有一个较长的答案:
一两件事,我对我所做的模板之间共享功能是定义佣工的对象,然后将其分配给多个模板,像所以:
var helpers = {
displayName: function() {
return Meteor.user().profile.name;
},
};
Template.header.helpers(helpers);
Template.content.helpers(helpers);
var events = {
'click #me': function(event, template) {
// handle event
},
'click #you': function(event, template) {
// handle event
},
};
Template.header.events(events);
Template.content.events(events);
这不是继承,而是它确实可以让你在模板之间共享功能。
如果你希望所有的模板有机会获得一个帮手,你可以定义一个全局帮手,像这样(见https://github.com/meteor/meteor/wiki/Handlebars):
Handlebars.registerHelper('displayName',function(){return Meteor.user().profile.name;});
我已经回答了这个问题here。虽然该解决方案不使用inheritance
,但它允许您轻松地跨模板共享事件和助手。
概括地说,我定义一个extendTemplate
功能,这需要在一个模板,并与助手和活动的对象作为参数:
extendTemplate = (template, mixin) ->
helpers = ({name, method} for name, method of mixin when name isnt "events")
template[obj.name] = obj.method for obj in helpers
if mixin.events?
template.events?.call(template, mixin.events)
template
欲了解更多信息和实例看我other answer。
最佳答案,在OOP中,建议你使用“继承的组合”,这个答案有利于前者。 –
最近,我需要在我的应用程序中具有相同的功能,所以我决定创建我自己的包,它将开箱即可完成这项工作。虽然它仍在进行中,但您可以放弃它。
基本上,整个方法如下:在您要扩展抽象的
// 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;
};
在您的新模板(new_template.js),写入以下内容:
// this copies your abstract template to your new one
Template.<your_abstract_template_name>.copyAs('<your_new_template_name>');
现在,你可以简单地覆盖你的帮手或事件(在我的情况下,它是帮助者photos
),通过做如下:
您将引用覆盖的帮助程序方法并提取未被覆盖的方法。
请注意,新模板的HTML文件不是必需的,因为我们一直提到抽象的文件。
源代码在Github上可用here!
- 1. 在Python中使用继承
- 2. 在C中使用继承#
- 3. 在PostgreSQL中使用继承
- 4. 使用继承
- 5. 使用继承
- 6. 使用继承
- 7. 在php中继承执行__constructor()继承
- 8. 在xml中继承继承视图
- 9. 的使用继承
- 10. 继承使用typeof
- 11. 使用继承类
- 12. 使用Java继承
- 13. 在grails域类中使用继承
- 14. 避免在JavaScript中继承使用新
- 15. 使用原型在Javascript中继承
- 16. 在Struts2中使用ModelDriven操作继承
- 17. 不能在MVC中使用继承,PHP
- 18. 如何在MySQL中使用继承?
- 19. 在Javascript中使用原型继承
- 20. 在继承类中使用ReactiveCommand和WhenAny
- 21. 在docker-compose.yml中使用继承
- 22. 如何在继承中使用'fout'
- 23. 在Entity Framework中使用继承?
- 24. 继承QLabel并在QWidget类中使用
- 25. 在java中使用继承的类
- 26. 在ES6中使用原型继承
- 27. 在继承中使用异常
- 28. java在继承中使用super()
- 29. 在AngularJS组件中使用继承
- 30. sqlalchemy在postgres中使用继承
我为流星创建了一个名为'view'的[一个包](https://atmosphere.meteor.com/package/view)。我用它来包装流星视图和类似视图类的主干。也许你会在那里找到一些想法。 – Andreas