2015-08-14 2 views
0

В моем клиентском коде у меня есть сеанс, который устанавливается на объект в глобальной функции:Почему мой помощник шаблонов, который использует session.get, не реагирует?

somefunctions.js

updateTimelineItem = function(newSelection){ 
    var selectedItem = $.grep(Session.get('liveProjectData').items,function(e){return e.position ==newSelection.parent().index()}); 
    Session.set('selectedItem',selectedItem[0]); 
}; 

Однако, в файле шаблона, где мне нужно, чтобы отобразить участки данные объекта этой сессии, мой помощник не запускается после установки сеанса.

mytemplate.js

Template.mytemplate.helpers({  
    selectedItem: function(){ 
     console.log('reactive update. new item selected.'); 
     return Session.get('selectedItem'); 
    } 
}) 

Пример того, что сеанс хранит

Object { position: 0, type: "image", source: "imgur", source-url: "https://dl.dropboxusercontent.com/u…", provider: "magic", animation: "puff", thumb: "https://dl.dropboxusercontent.com/u…", fullsize: "https://dl.dropboxusercontent.com/u…", duration: 1000 } 

Я пытался найти документацию относительно того, когда сеанс не будет реактивным без особой удачи. Я знаю, что сеанс установлен, потому что я могу написать Session.get ('selectedItem') в консоли браузера, и я получаю ожидаемый результат.

Благодарим за помощь.

+0

'Session' будет сериализовать свои входы, что часто приводит к необычному поведению при хранении сложных данных. Можете ли вы привести пример того, как будет выглядеть 'selectedItem [0]'? –

+0

Спасибо, Дэвид, я привел пример данных, которые храню в сессии в своем вопросе. – danSiebes

+0

вы можете захотеть 'JSON.stringify' /' JSON.parse' ваш объект до/после установки/получения переменной сеанса по предложению Дэвида –

ответ

0

Причина, по которой мой реактивный код не работает, заключается в том, что я не получил доступ к конкретной реактивной переменной в пробелах этого шаблона. Хотя Template.helpers является реактивным вычислением, он выполняется на основе использования реактивных варов в dom. Это не похоже на другие реактивные вычисления.

Информация об этом трудно найти, но в документе Meteor указывается Template.currentData() и его использование внутри помощника.

Работа, которую мне нужно было сделать с реактивной переменной, была вне представления и поэтому не должна использоваться в Template.helper, а вместо этого - template.autorun.

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