J'ai le module CoffeeScript suivant appelé Course. J'ai un petit morceau de code que je voudrais réutiliser, j'ai créé une méthode appelée preSelectItemSize
.Problème de portée lors de l'appel de la méthode CoffeeScript dans le rappel Fancybox
Je voudrais appeler cette méthode lorsque init
est appelée et également dans le rappel Fancybox afterShow
. Le code suivant fonctionne, mais il ne croit pas qu'il est correct d'utiliser le nom du module et je devrais utiliser la référence @
à "this" à la place.
Qu'est-ce que je fais mal? (Extrait de code réduit par souci de concision)
$ = window.jQuery = require("jquery")
Course =
init: ->
$('.js-product-overlay').on 'click', (e) =>
@viewProductClickHandler(e, MediaDetection)
@preSelectItemSize()
viewProductClickHandler: (e, mediaDetection) =>
$('.js-product-overlay').fancybox({
href: wishlist_overlay_href
maxWidth: '775px'
minHeight: '495px'
autoCenter: '!isTouch'
height: 'auto'
scrolling: true
fitToView: false
autoSize: false
padding: 0
tpl:
closeBtn: '<a class="fancybox-item modal__close fancybox-close" href="javascript:;">Close</a>'
afterShow: ->
$('.js-fancybox-close').on 'click', (e) ->
e.preventDefault()
$.fancybox.close()
Course.preSelectItemSize()
})
preSelectItemSize: ->
itemId = $('.modal__product-info').attr('data-item-id')
$('#size-' + itemId).click()
module.exports = Course
Voulez-vous juste 'afterShow: =>' au lieu de 'afterShow: ->'? –
@muistooshort Non, j'ai d'abord utilisé la "grosse flèche" '=> 1', mais cela ne fonctionne pas. Je l'ai juste réessayé et ai '_this.preSelectItemSize n'est pas une fonction – crmpicco
Juste, parce que vous n'avez pas de classe, vous avez juste un objet littéral, manqué cela. –