我正在编写一个流星应用程序并使用反应功能在dom可用或更新时实现结果的自动更新。 这是我的代码片段:
Template.message.helpers
profession: ->
return Template.instance().profession.get()
Template.message.onCreated ->
@profession = new ReactiveVar ''
msg = Template.currentData()
@userId = msg.u?._id
Tracker.autorun =>
Meteor.call 'getLimitedUserData', {id:Template.instance().userId}, (error, result) =>
if error
return handleError(error)
if result
@profession.set result.customFields.Profession
dom:
{{#if profession}}
<span class="profession"><i>{{profession}}</i></span>
{{/if}}
我可以做错什么?这个职业没有得到更新..但是如果我在控制台中登录它会打印出正确的值。
感谢任何帮助?
答案 0 :(得分:0)
您的Tracker.autorun()
永远不会投放,因为除了userId
之外,它不依赖于任何被动数据源。如果您在打开此模板时已登录,则userId
不会更改。
您可以在模板Meteor.call()
处理程序中执行onCreated
,然后当它(异步)返回时,您的帮助程序将自动更新。
Template.message.helpers
profession: ->
return Template.instance().profession.get()
Template.message.onCreated ->
@profession = new ReactiveVar ''
Meteor.call 'getLimitedUserData', {id:Template.instance().userId}, (error, result) =>
if error
return handleError(error)
else
@profession.set result.customFields.Profession
但是:为什么使用Meteor.call()
来获取有关用户的信息?这通常通过用户集合上的pub-sub来处理。这将为您提供响应式更新的优势以及简化模板模式 - 您不需要反应变量来显示有关当前用户的信息。
答案 1 :(得分:0)
由于我们不知道服务器上getLimitedUserData
的实施情况,因此我假设有两种情况:
&#34;有限的用户数据&#34;是来自后端MongoDB的一组有限数据,您希望在其中使用Meteor.publish
和Meteor.subscribe
。
// on the server
Meteor.publish('limitedUserData', function() {
return Meteor.users.find({ /* limits */ });
})
和Blaze代码:
Template.message.onCreated(function() {
this.autorun(() => {
this.subscribe('limitedUserData')
})
})
Template.message.helpers({
profession() {
return Meteor.users.find({ /* same limit */}).profession
}
})
&#34;有限的用户数据&#34;是对外部服务的API调用,这有点复杂。您可能需要使用DPP和setInterval等的某种组合。