2016-08-01 3 views
0

J'utilise la bibliothèque reac-keydown pour ajouter des raccourcis clavier à mon application, mais je ne peux pas la faire fonctionner dans les composants de boîtes de dialogue internes. Les boîtes de dialogue ne sont pas toujours visibles, mais je m'attends à ce que les touches fonctionnent lorsqu'elles sont visibles. Je suis en train de event_handlers.js._onKeyDown (événement) méthode, mais avec une valeur manquante: fn = non défini, alors que fn doit contenir la fonction décorée.intercepter les événements de keydown dans les composants internes en utilisant rea-keydown

Mes composants ressemble:

<Container> 
    <MyDialog> 
     <material-ui-dialog/> 
    </MyDialog> 
</Container> 

Container.js:

import keydown from 'react-keydown' 
class Container extends Component { 
    @keydown('enter') 
    someMethod1(){ 
     // working 
    } 
    render() { 
     return (
     <div> 
      <MyDialog/> 
     </div> 
    ) 
    } 
} 

MyDialog.js:

import keydown, {keydownScoped} from 'react-keydown' 
@keydown('enter') 
class MyDialog extends Component { 
    @keydownScoped('enter') 
    someMethod3(){ 
     // not working 
    } 
} 
+0

Quelle est la logique qui détermine si elle est visible ou non? En outre, pouvez-vous confirmer que vous n'essayez pas de déclencher la méthode liée à la clé lorsque vous vous concentrez sur un champ de formulaire? – glortho

+0

La boîte de dialogue n'est pas toujours visible. C'est une boîte de dialogue de confirmation (qui contient une boîte de dialogue matérielle) qui est déclenchée par une autre action du composant. Il n'y a pas de champ de saisie ou de zone de texte dans le composant, seulement une boîte de dialogue avec les boutons ok/cancel. – user1813302

+0

Est-il monté même quand il n'est pas visible? Le problème pourrait être que s'il est déjà monté, mais caché, et que vous cliquez ou tabulez sur un composant en dehors de la portée du composant de dialogue, les raccourcis clavier ne répondront pas. – glortho

Répondre

0

D'après votre description dans les commentaires, le problème semble soit que vos composants Dialog se montent, puis perdent le focus afin que les raccourcis clavier à l'intérieur de ceux-ci ne reçoivent pas la frappe s. Vous avez quelques options:

1) Développez la portée de la liaison de touches en décochant un composant qui est un ancêtre de vos composants Dialog et ne perdrez pas le focus. Dans un cas extrême, cela pourrait être le composant racine de votre application. Décorez ensuite la méthode de composant Dialogue souhaitée avec keydownScoped. À l'intérieur de cette méthode, examinez les accessoires pour vous assurer que le dialogue actuel est actif.

2) Activez par programme les raccourcis clavier de votre Dialog sur les lignes https://github.com/glortho/react-keydown/issues/28.

Espérons que ça aide!