2014-10-16 4 views
5

По Метеор 0.9.4, определяющий шаблон. MyTemplate. MyHelperFunction() уже недействителен.Вызов одного помощника из другого помощника в контексте шаблона (Метеор 0.9.4)

Мы отказались от шаблона Template.someTemplate.myHelper = ... в пользу Template.someTemplate.helpers (...). Использование старого синтаксиса все еще работает, но оно выводит предупреждение на консоль.

Для меня это казалось прекрасным, так как это могло бы (по крайней мере) сохранить некорректный текст и дублированный текст. Однако вскоре я обнаружил, что способ создания приложений Meteor был склонен к тому, что эта новая версия устарела. В моих приложениях я определял помощники/функции со старым синтаксисом, а затем вызывал эти методы из других помощников. Я нашел, что это помогло мне сохранить мой код чистым и последовательным.

Например, я мог бы иметь контроль, как это:

//Common Method 
Template.myTemplate.doCommonThing = function() 
{ 
    /* Commonly used method is defined here */ 
} 

//Other Methods 
Template.myTemplate.otherThing1 = function() 
{ 
    /* Do proprietary thing here */ 
    Template.myTemplate.doCommonThing(); 
} 

Template.myTemplate.otherThing2 = function() 
{ 
    /* Do proprietary thing here */ 
    Template.myTemplate.doCommonThing(); 
} 

Но это, кажется, не доступен с новым методом Метеор наводит на мысль (что заставляет меня думать, что я был неправ все вместе). Мой вопрос: Каков предпочтительный способ обмена общей логикой шаблона между помощниками шаблона?

+0

Я осознаю, что это по-прежнему актуальный вопрос, так как опытные установки оптимально могли бы вызвать в помощники шаблонов. В противном случае вы в конечном итоге переписываете свое приложение без необходимости ... – MrMowgli

+0

Этот ответ может быть полезен: https://stackoverflow.com/questions/27755891/meteor-what-is-spacebars-kw-hash-object#answer-27756461 –

ответ

3

Извините, если я скучно, но вы не могли бы объявить функцию как объект и назначить его нескольким помощникам? Например:

// Common methods 
doCommonThing = function(instance) // don't use *var* so that it becomes a global 
{ 
    /* Commonly used method is defined here */ 
} 

Template.myTemplate.helpers({ 
    otherThing1: function() { 
     var _instance = this; // assign original instance *this* to local variable for later use 
     /* Do proprietary thing here */ 
     doCommonThing(_instance); // call the common function, while passing in the current template instance 
    }, 
    otherThing2: function() { 
     var _instance = this; 
     /* Do some other proprietary thing here */ 
     doCommonThing(_instance); 
    } 
}); 

Кстати, если вы заметили, что вы постоянно дублируют одни и те же хелперы на нескольких шаблонов, он может помочь использовать Template.registerHelper вместо назначения той же функции в нескольких местах.

+0

Это плотно соединяет ваш код. Все, что полагается на doCommonThing(), должно знать, что оно существует и как оно называется. Это СУХОЙ, но в сочетании. –

+0

Возможно, этот ответ полезен: https://stackoverflow.com/questions/27755891/meteor-what-is-spacebars-kw-hash-object#answer-27756461 –

Смежные вопросы