2015-05-17 6 views
1

Я знаю, что я могу получить доступ к методам между файлами, опуская var, но что такое структура каталогов проекта «лучшие практики» для определения вспомогательных методов, которые используются событиями шаблона через разные шаблоны.Где помещать вспомогательные методы, используемые в событиях для нескольких шаблонов Meteor

Например, у меня есть:

template1.js:

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

template2.js:

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

Не хотите просто зарегистрировать универсальный помощник с Template.registerHelper (имя, функция)? –

ответ

3

Одна из проблем с «доля кода в файлах с глобалов» метеора подхода заключается в том, что, когда вы смотрите на файл, в котором используется функция, вы не знаете, где определена функция. Я предпочитаю определять одну глобальную переменную в каждом файле, которая должна экспортировать переменные. Эта переменная имеет то же имя, что и файл, с начальным капиталом (или другим соглашением об именах, которое идентифицирует его как «объект экспорта»). Экспорт хранится как свойства этого объекта. Таким образом, вы можете создать файл с именем globalHelpers.js:

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

И затем использовать его в других файлах с GlobalHelpers.helper(). Если вы посмотрите на этот код позже, вы можете посмотреть в globalHelpers.js, чтобы найти функцию helper.

Если файл экспортирует один класс или коллекцию, тогда можно просто использовать этот объект в качестве объекта экспорта. Итак, вместо things.js с Things = {}; 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);