流星:为什么autorun在onCreated中执行了两次

时间:2015-08-19 20:32:07

标签: meteor meteor-blaze

当我在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'
“自动运行”
'数据公布'

我不明白为什么'数据发布'会在onCreated执行之前提前解雇。

如果我在onRenderd函数中声明了此自动运行操作,问题就解决了。

我怎么能理解这个?

1 个答案:

答案 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将慢慢地迅速成为新标准,而CoffeeScript没有ES6转换的路线图。