Помощники Meteor возвращают полезный класс

Meteor noob здесь, пытаясь освоить шаблоны. Итак, у меня есть этот набор в JS:

Session.set('activeSection', 'start');

Template.sectionContainer.helpers = ({
    "isActive": function() {
        return (Session.get("activeSection") === 'start') ? "active" : "nope";
    }
});

а затем иметь:

<template name="sectionContainer">
    <section class="{{isActive}}"></section>
</template>

Однако я не получаю классы active/nope, как я ожидал. sectionContainer вложен в другой шаблон, если это имеет какое-либо значение. Я чувствую, что мне не хватает чего-то очень простого, что я делаю неправильно?

Он отлично работает, используя устаревший синтаксис:

Template.sectionContainer.isActive = function() {
    return (Session.get("activeSection") === 'start') ? "active" : "nope";
}

Даже запуск Template.sectionContainer.helpers.isActive() из консоли возвращает правильное значение.


person Brian    schedule 03.01.2015    source источник


Ответы (2)


Если это работает:

Template.sectionContainer.isActive = function() {
   return (Session.get("activeSection") === 'start') ? "active" : "nope";
}

то в новом синтаксисе это будет:

Template.sectionContainer.helpers({
    isActive: function() {
        return (Session.get("activeSection") === 'start') ? "active" : "nope";
    }
});
person sdooo    schedule 04.01.2015
comment
Очевидно, тогда я понял синтаксис, но я должен делать что-то не так, поскольку простой перевод старого синтаксиса в новый нарушает код. - person Brian; 04.01.2015
comment
isActive: function() { if(Session.get(activeSection) == 'start') return active; вернуть нет; } - person sdooo; 04.01.2015
comment
Если это не работает, значит что-то не так с сессией - person sdooo; 04.01.2015
comment
Это не работает. Однако запуск Session.get(activeSection) в консоли показывает правильное значение. :/ - person Brian; 05.01.2015
comment
Возможно, вы подписали этот хелпер на другой шаблон, а не используете его в шаблоне.‹template›.helpers. Я не буду затем отправлять это в какой-то репозиторий, и я посмотрю, в чем может быть проблема. - person sdooo; 05.01.2015
comment
github.com/mastastealth/helperTest — я создал простейший тестовый пример, который мог, демонстрируя ту же проблему. - person Brian; 06.01.2015
comment
Хехе, это шаблон...помощники({ не шаблон...помощники = ({ - person sdooo; 06.01.2015
comment
вздох Спасибо. Я знал, что это будет что-то глупое. Я отмечу твой ответ как ответ, за то, что помог мне сузить круг. хD Спасибо! - person Brian; 06.01.2015
comment
Ха-ха, рад, что это помогло: D, и, кстати, я сделал это в своем ответе; p - person sdooo; 06.01.2015

Вы должны использовать его как:

Template.sectionContainer.helpers({
    isActive: function() {
        return Session.equals("activeSection", "start") ? "active" : "nope";
    }
});
person juliancwirko    schedule 04.01.2015
comment
Спасибо. Это, безусловно, лучший синтаксис для условного выражения, но, к сожалению, не решает мою проблему рендеринга. - person Brian; 04.01.2015
comment
Хммм, у вас есть что-то вроде: ‹template name=name1›‹template name=name2›‹/template›‹/template› ?? - person juliancwirko; 04.01.2015
comment
Не в одном файле. Я использую ‹template name=sectionContainer›...‹/template› (который находится в собственном файле HTML) внутри другого, например: ‹template name=layout› {{› sectionContainer}} ‹/template› - person Brian; 04.01.2015