2016-08-01 102 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的行編程激活對話框的按鍵。

希望有幫助!