助手有时在流星js中调用两次

时间:2014-10-30 22:16:39

标签: javascript meteor meteor-helper

我有这个帮助器,有时它第二次调用slug第二次未定义第二次没问题,如何防止helper被调用两次?

shareurl: ->
    console.log "helper"

    campId = Session.get('campaign_id')

    Meteor.call 'getCampaignSlug', campId, (e, resp) ->
      console.log e if e
      console.log resp
      slug = resp[0]
      campaignId = resp[1]
      Session.set('slug' + campId, slug)

    slug = Session.get('slug' + campId)
    #slug = "test"

    console.log Meteor.absoluteUrl "" + Meteor.user()._id + '/' + slug
    return Meteor.absoluteUrl "" + Meteor.user()._id + '/' + slug

在模板中,它被调用一次。但是在控制台中,我看到它有时会被调用两次。

<button class="btn btn-primary pull-right draft-send mr10" type="button" data-shareurl="{{shareurl}}" data-step="1" data-intro="Click here to send your campaign" data-position="left">Send</button>

2 个答案:

答案 0 :(得分:0)

不熟悉coffeescript,但尝试将campId = Session.get('campaign_id')包裹起来:

if(campId = Session.get('campaign_id')){
  //do my stuff
}

然后,如果您的会话变量未定义,则不会处理任何内容。

干杯,

答案 1 :(得分:0)

它被调用两次,因为当它第一次被调用时,你进行方法调用。当处理该方法调用的结果时(注意:此时第一次调用此帮助程序),您更改了此帮助程序所依赖的会话变量,因此再次调用此帮助程序。

<强> [注]

那么,这不会导致无限循环吗?不,因为第二次调用帮助程序时,将会话变量设置为与之前相同的值,这不会导致重新运行。

<强> [/注]

那么解决方案是什么?这可以用不同的方式处理(但是我很害怕),但是如果你有一个帮助器返回Session.get('slug' + Session.get('campaign_id'))的值,你可以在#if块表达式中使用这个帮助器来查看如果已经为其分配了值,并且在此#if块表达式中,您可以调用shareurl