2017-10-11 23 views
0

J'ai un composant ButtonHtml qui intercepte les événements de clic afin qu'il puisse publier l'événement dans un composant qui empêche de cliquer sur plus d'une fois pour éviter de double-cliquer. Il travaillait avant de mettre à jour le cadre aurélique.Evénement de clic de liaison dans aurelia

Maintenant, j'ai cette erreur. Je ne suis pas sûr pourquoi.

ButtonHtml.js:51 TypeError: this.click is not a function at ButtonHtml.buttonClick (ButtonHtml.js:47) at CallScope.evaluate (aurelia-binding.js:1542) at Listener.callSource (aurelia-binding.js:5119) at Listener.handleEvent (aurelia-binding.js:5128)

Voici le Html et JS

<template> 
    <button class="${class} waves-effect btn btn-${isSelected ? 'selected' : type} ${isBlock ? 'btn-block' : ''}" click.trigger="buttonClick()" title="${title}" disabled.bind="disabled"> 
     <span class.bind="labelVisibility === '' ? '' : labelVisibility" if.bind="label !== ''">${label}</span> 
     <i if.bind="icon !== ''" class="material-icons ${label !== '' ? iconLocation : ''}">${icon}</i> 
    </button> 
</template> 

import {bindable, bindingMode, containerless, inject} from 'aurelia-framework'; 
import {EventPublishingService} from '../../Service/EventServices/EventPublishingService'; 

@containerless() 
@inject(EventPublishingService) 
export class ButtonHtml 
{ 
    constructor(eventPublishingService) 
    { 
     this.eventPublishingService = eventPublishingService; 
    } 

    /** 
    * Style bindings 
    */ 
    @bindable label = ''; 
    @bindable labelVisibility = ''; 

    @bindable icon = ''; 
    @bindable iconLocation= 'left'; 

    @bindable class = ''; 
    @bindable({ defaultBindingMode: bindingMode.twoWay }) type = 'primary';  
    @bindable({ defaultBindingMode: bindingMode.twoWay }) isSelected = false; 
    @bindable isBlock = false; 
    @bindable disabled = false; 

    /** 
    * Events 
    */ 
    @bindable click; 

    /** 
    * Native properties 
    */ 
    @bindable title = ''; 
    @bindable isBlocking = false; 

    buttonClick() 
    { 
     if (this.isBlocking) 
     { 
      this.eventPublishingService.disableActions(); 
     }   

     try{ 
      this.click(); 
     } 
     catch(exception) 
     { 
      console.error(exception); 
     } 
    } 
} 

Ceci est une utilisation typique:

<button-html type="action" icon="done" label="OK" tap.call="Go()"></button-html> 

Voici les versions de la bibliothèque aurelia

"aurelia-animator-css": "1.0.3", "aurelia-bootstrapper": "2.1.1", "aurelia-dialog": "1.0.0-rc.1.0.3", "aurelia-fetch-client": "1.1.3", "aurelia-framework": "1.1.5", "aurelia-materialize-bridge": "~0.31.0", "aurelia-pal-browser": "1.3.0", "aurelia-polyfills": "1.2.2", "aurelia-router": "1.4.0", "aurelia-templating": "1.5.0", "aurelia-templating-binding": "1.4.0", "aurelia-templating-resources": "1.5.1", "aurelia-templating-router": "1.2.0", "aurelia-validation": "1.1.2",

Edit:

obtenu ce travail en changeant l'usage de click.call au lieu de tap.call

<button-html type="action" icon="done" label="OK" click.call="Go()"></button-html> 
+0

Sans voir comment vous utilisez cet élément personnalisé, il est difficile de savoir exactement ce qui se passe. –

+0

Je vais éditer l'OP. –

Répondre

1

Vous avez un bindable pour click, mais vous ne lient pas quoi que ce soit. Il semble que vous liez tap, mais ce n'est pas un lien que vous avez configuré. Je pencherais probablement contre l'utilisation de click comme nom pouvant être lié, car cela pourrait créer une confusion avec la génération de l'événement click sur tous les éléments HTML. Il suffit de changer le nom du bindable pour tap et il devrait commencer à fonctionner comme prévu.

+0

Je l'ai essayé. Ça n'a pas marché. tap est un attribut personnalisé utilisant hammerjs pour que le bouton fonctionne mieux sur ipads. Tout cela fonctionnait avant la mise à niveau. –

+0

Eh bien, vous essayez d'appeler une fonction sur votre VM qui n'est pas définie, c'est pourquoi vous obtenez une exception levée. Vous aurez besoin de lier quelque chose à «cliquer» pour que tout fonctionne. –

+0

L'attribut de frappe personnalisé est l'endroit où il doit cliquer. –