2016-07-19 3 views
7

私はOverlayTriggerのフォーム入力を含むPopoverと、データを保存して閉じるためのButtonをラップしています。React Bootstrap - 手動でOverlayTriggerを閉じる方法

save(e) { 
    this.setState({ editing: false }) 
    this.props.handleUpdate(e); 
} 

render() { 
    return (
     <OverlayTrigger trigger="click" 
     rootClose={true} 
     onExit={this.save.bind(this) } 
     show={this.state.editing} 
     overlay={ 
      <Popover title="Time Entry"> 
       <FormGroup> 
        <ControlLabel>Data: </ControlLabel> 
        <FormControl type={'number'}/> 
       </FormGroup> 
       <Button onClick={this.save.bind(this) }>Save</Button> 
      </Popover> 
     }> 

私はrootClose = trueを持っている、と私のコールバックがonExitを実行されますが、私は手動で近いオーバーレイへの道が表示されません。ブートストラップModalshow属性を使用して、(予想通り)動作しないようにしようとしています。

答えて

17

要素がレンダリングされたら、<OverlayTrigger ref="overlay"...要素にrefを追加し、hideメソッドを呼び出します。テストしていないが動作するはずです:

this.refs.overlay.hide(); 
+0

可能であれば、 'ref'を避けるように指示がありますが、これは素晴らしいです。 –

+0

これは、反応ブートストラップ0.30.7では反応しません。15.4.2と反応します。今これを達成する方法を知っていますか? –

+0

私はこれを今はテストすることはできませんが、apiにはまだhideメソッドが含まれているので動作します[https://github.com/react-bootstrap/react-bootstrap/blob/v0.30.7/src/OverlayTrigger.js# L221]、またはこれで試すことができます[https://github.com/react-bootstrap/react-bootstrap/blob/v0.30.7/src/OverlayTrigger.js#L213] – Igorsvee

4

Hide関数は、OverlayTriggerのパブリック関数ではありません。 <OverlayTrigger rootClose={true}...を設定し、onClickイベントトリガーコールdocument.body.click()を入力します。

+0

非常に巧妙です。いい答えだ。 –

関連する問題