回答
我認爲簡單的答案是否定的,但這裏有一個較長的答案:
一兩件事,我對我所做的模板之間共享功能是定義傭工的對象,然後將其分配給多個模板,像所以:
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