0

我有这个助手,有时第一次调用它两次,第二次未定义 slug 没关系,如何防止助手被调用两次?

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>
4

2 回答 2

0

不熟悉coffeescript,但尝试campId = Session.get('campaign_id')像这样包装:

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

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

干杯,

于 2014-12-09T11:57:52.160 回答
0

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

[笔记]

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

[/笔记]

那么解决方案是什么?这可以用不同的方式处理(但恐怕不是很好),但如果你有一个返回值的助手Session.get('slug' + Session.get('campaign_id')),你可以在块表达式中使用这个助手#if来查看它是否已经被分配了一个值,在这个#if块表达式中,你调用你的shareurl.

于 2014-12-09T14:39:48.380 回答