我有这个意味着的Meteor代码,可以实时更新通知模板,只要触发了相应的操作:
〜/服务器/ app.js
Meteor.methods({
notifs: function(){
return Meteor.users.findOne({_id:this.userId}, {'profile.notifs': 1});
}
});
和:
〜/客户端/ apps.js
Template.notifs.helpers({
notifs: function(){
Meteor.call('notifs', function(err, data){
Session.set('notifs', data);
});
return Session.get('notifs');
}
});
最后:
〜/ public / templates / notifs.html
<template name='notifs'>
{{#each notifs}}
<p>...</p>
{{/each}}
</template>
此代码 目前只是在用户登录时列出通知,但无法实时更新,以便在触发操作时显示新通知。 新通知仅在页面刷新后显示(实际上,这是无用的)。
经过几个小时的谷歌搜索,我放弃并发布此处,以便有人可以帮助我。
提前致谢。
答案 0 :(得分:0)
在它的核心,这个问题是关于reactivity。由于Meteor.call
不是一个被动数据源(它只是一个远程过程调用),如果底层数据发生变化,帮助者将不会再次运行。
由于已经发布了必要的用户文档(当前用户的用户文档),因此不需要方法调用。您可以使用find(一个被动数据源)重写您的帮助程序,如下所示:
Template.notifs.helpers({
notifs: function() {
return Meteor.users.findOne({_id: Meteor.userId()});
}
});
但是,Meteor.user()为您提供了相同的功能:
Template.notifs.helpers({
notifs: function() {
return Meteor.user();
}
});
但是,您甚至不需要这样做,因为模板附带{{currentUser}}帮助器。因此,您可以完全放弃帮助程序并修改模板,如下所示:
<template name='notifs'>
{{#each currentUser.notifs}}
<p>...</p>
{{/each}}
</template>
如果您确实需要帮助中的流星调用结果,您应该阅读this question的答案。