2016-08-01 61 views
0

我正在使用react-keydown库将键盘快捷键添加到我的应用程序,但无法使其在内部对话框组件中工作。对话框并不总是可见的,但我期望这些按键在它们可见时工作。 我越来越对event_handlers.js._onKeyDown(事件)方法,但在缺失值:FN =未定义,而FN应该包含的装饰功能。使用react-keydown在内部组件中捕获keydown事件

我的组件看起来像:

<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

什么是决定它是否可见的逻辑?另外,您是否可以确认在关注表单字段时没有尝试触发键控方法? – glortho

+0

对话不总是可见的。这是一个确认对话框(其中包含材料ui对话框),由组件中的其他操作触发。组件中没有输入字段或文本区域,只有带有ok/cancel按钮的对话框。 – user1813302

+0

即使不可见,它是否安装?问题可能在于,如果它已被挂载但隐藏,并且您单击或选择了对话框组件范围之外的组件,它的键绑定将不会响应。 – glortho

回答

0

基于在评论你的描述,这个问题似乎因为你的Dialog组件挂载然后失去焦点,所以它们内部的任何键绑定都不会收到按键秒。您有几个选项:

1)通过装饰作为Dialog组件祖先的组件来扩展键绑定的作用域,并且不会失去焦点。在极端情况下,这可能是您的应用程序的根本组件。然后用keydownScoped修饰所需的对话框组件方法。在该方法内部检查道具以确保当前对话框是活动对话框。

2)按照https://github.com/glortho/react-keydown/issues/28的行编程激活对话框的按键。

希望有帮助!