2014-02-20 63 views
2

我想爲流星中的每個用戶定義模板執行一個函數。獲取流星中的用戶定義模板列表

例子:

<template name="settings"> 
    <p>Settings</p> 
</template> 

然後在一些JS文件:

template_names = ... 
_.each(template_names, function(name) { 
    Template[name].rendered = defaultRenderingFunction; 
}); 

是否有某種明確定義的方式來獲得用戶自定義(非系統定義)模板列表?

回答

2

要與這個解決方案迄今:

var template_names = []; 
for (var key in Template) { 
    if (Template.hasOwnProperty(key)) { 
    // Meteor internal templates begin with _ 
    if (key.indexOf('_') !== 0) { 
     template_names.push(key); 
    } 
    } 
} 

這將包括包含在其他包的模板。

+1

你爲什麼不這樣做的其他方式?在client/lib文件夾的某個地方定義一個全局的defaultRenderingFunction(),並在模板的回調函數中調用它。通過這種方式,您可以對運行此操作的位置進行更細緻的控制。 –

+0

這就是我一開始所做的,它的工作原理。但後來當我們添加新模板時,其他開發人員(甚至我自己)很容易忘記將函數分配給新模板的'rendered'屬性。如果我在這裏概述的方法證明是可行的,我們可以構建一個幫助程序來構建一個模板,默認情況下會自動添加此函數(但這仍然需要開發人員記得使用該幫助程序!) – u2622

1

試試這個:

$.each(Template, function(template) { 
    if(template.startsWith("_")){ 
     // Assuming user defined templates do not start with a "_" 
     return true; 
    } 
    Template[template].rendered = defaultRenderingFunction; 
});