2015-05-17 15 views
1

我知道我可以通過忽略var來跨文件訪問方法,但什麼是「最佳實踐」項目目錄結構來定義模板事件跨越使用的幫助器方法不同的模板。將事件中使用的幫助器方法放在多個Meteor模板中的位置

例如,我有:

template1.js:

Template.template1.events({ 
    'event': function() { 
    helper(); 
    } 
}); 

template2.js:

Template.template2.events({ 
    'event': function() { 
    helper(); 
    } 
}); 
+1

難道你不想只用Template.registerHelper(name,function)註冊一個通用助手嗎? –

回答

3

一個問題與流星的「跨文件共享代碼與全局」的方法是,當你在看文件,其中一個函數被使用,你不知道函數被定義在哪裏。我更喜歡在每個需要導出變量的文件中定義一個全局變量。該變量與文件具有相同的名稱,並帶有初始大寫字母(或其他命名約定,將其標識爲「導出對象」)。導出存儲爲該對象的屬性。所以,你可以創建一個名爲globalHelpers.js文件:

GlobalHelpers = {}; 
GlobalHelpers.helper = function() { 
    // ... 
}; 

然後在其他文件與GlobalHelpers.helper()使用它。如果稍後查看此代碼,則需要查看globalHelpers.js以查找helper函數。

如果一個文件導出單個類或集合,那麼只需使用該對象作爲導出對象即可。所以,而不是things.jsThings = {}; Things.Things = new Mongo.Collection...,你可以做Things = new Mongo.Collection...

您可能需要將文件放在lib目錄中,以便在其他文件之前加載該文件。

請勿註冊Template.registerHelper,除非您想直接從調用{{ }}的模板調用它。

+0

我喜歡這種方式,謝謝! – delisdeli

0

我建議在/client/scripts/globalHelpers.js

實施例定義這樣的功能:

Template.registerHelper('foo',function(arg1,arg2){ 
    return arg1 + arg2; 
}); 

然後你就可以用Blaze._globalHelpers.通過在前面就使用此功能從任何地方:

var result = Blaze._globalHelpers.foo(param1, param2); 
相關問題