为什么我的模板助手使用session.get而不是被动?

时间:2015-08-14 22:12:32

标签: javascript meteor

在我的客户端代码中,我有一个Session,它被设置为全局函数中的一个对象:

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')并获得预期的输出。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我的反应代码未运行的原因是因为我没有访问该模板的空格键中的特定反应变量。虽然Template.helpers是一个反应计算,但它是根据dom中反应变量的使用来执行的。这与其他反应计算不同。

有关此问题的信息很难得到,但有关Template.currentData()的Meteor文档及其在帮助程序中的用法的暗示。

我需要对反应变量进行的工作不在视图范围内,因此不应在Template.helper中使用,而应在template.autorun中使用。