当我在Template.onCreated函数中声明自动运行订阅时, 自动运行被触发两次,因此也会触发两次发布。
Route.route 'moneyDepositRequest',
onRun: ->
console.log 'onRun'
Session.set 'condition', where: name: 'example'
Template.moneyDepositRequest.onCreated ->
console.log 'onCreated'
@autorun ->
console.log 'autorun'
@subscribe 'data', Session.get('condition')
if Meteor.isServer
Meteor.publish 'data', (condition) ->
console.log 'data publication'
Data.find()
此代码显示了这一系列日志
'数据发布'
'onRun'
'onCreated'
“自动运行”
'数据公布'
我不明白为什么
如果我在onRenderd函数中声明了此自动运行操作,问题就解决了。
我怎么能理解这个?
答案 0 :(得分:1)
Tracker.autorun
总是立即执行代码,然后在其中任何反应变量或函数发生变化时执行。所以它立即运行一次,然后在触发路线时立即再次运行。试试这个:
Template.moneyDepositRequest.onCreated ->
console.log 'onCreated'
@autorun =>
console.log 'autorun'
if !!Session.get('condition')
@subscribe 'data', Session.get('condition')
BTW,作为旁注,我开始远离CoffeeScript。 ES6将