2015-12-29 3 views
0

Говорят, что использование слишком большого количества Sessions является плохим, потому что оно «загрязняет глобальное пространство имен». Теперь я точно не знаю, что это значит (я могу легко подумать о многих других именах для использования ...), но вместо этого я начал использовать ReactiveVar, но это кажется сложным и ошибочным, поэтому я задаюсь вопросом, какие преимущества есть.Как сохранить шаблон actioniveVars?

Например, этот простой случай использования выдает ошибку:

Template.AddingItem.onRendered(function() { 
    this.addingItem = new ReactiveVar(false) 
}) 

Template.AddingItem.events({ 

    'click .add-new-item.button': function(event, template) { 
     var addingItem = template.addingItem.get() 
     if (addingItem === false) { 
      template.addingItem.set(true) 
     } 
     else { 
      template.addingItem.set(false) 
     } 
    } 
}) 

Template.AddingItem.helpers({ 

    isAddingItem: function() { 
     return Template.instance().addingItem.get() 
    }, 
}) 

Шаблон:

{{#if isAddingItem}} 
    <div>Showing something</div> 
{{/if}} 

Иногда помощник запускается до onRendered и ничего не может вернуться, так что ошибки страницы из. Это буквально самый простой вариант использования для ReactiveVar, и он даже не может этого сделать правильно? Что мне не хватает?

+0

Я бы предложил изменить заголовок этого вопроса на что-то более полезное для будущих гуглеров ... что-то вроде «Лучший способ сохранить реактивный шаблон в рамке» – tyleha

ответ

1

Template.onCreated для создания reactiveVars.

Вы должны создать свой реактивный сигнал до. Любой код контроллера работает так, чтобы Tracker мог правильно отслеживать ваш reactiveVar. onRendered лучше всего использовать для функций, которые управляют DOM, и работает слишком поздно, чтобы надежно обеспечить, чтосуществует, когда помощник запускается, как вы столкнулись.

Это то, что onCreated подходит для. Таким образом, ваш реактивныйVar будет обеспечен, когда ваш код помощника/контроллера будет работать.

Template.AddingItem.onCreated(function() { 
    this.addingItem = new ReactiveVar(false) 
}) 

И в будущем, Sessions на самом деле просто reactiveVars с глобальной областью ... нет ничего магического о них. Это reactiveVars полностью вниз.

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