我有这个帮助器,有时它第二次调用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>
答案 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
。