2016-07-19 23 views
7

Mam OverlayTrigger owijanie , który zawiera dane wejściowe niektórych formularzy i Button, aby zapisać dane i zamknąć.React Bootstrap - sposób ręcznego zamykania 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> 
     }> 

mam rootClose = true, a moja zwrotna zostanie wykonany onExit, ale nie widzę sposobu na ręcznie blisko nakładki. Próbuję użyć atrybutu show z Bootstrap Modal, który (przewidywalnie) nie działa.

Odpowiedz

17

Dodaj ref do elementu <OverlayTrigger ref="overlay"... i wywołaj metodę hide po wyrenderowaniu elementu. Nie testowałem tego, ale powinno działać:

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

Mamy dyrektywę, aby uniknąć "ref" tam, gdzie to możliwe, ale to działa świetnie. –

+0

To nie działa z React-bootstrap 0.30.7 i reaguje 15.4.2. Czy wiesz, jak to osiągnąć teraz? –

+0

Nie mogę tego teraz przetestować, ale powinno działać, ponieważ api nadal zawiera metodę hide [https://github.com/react-bootstrap/react-bootstrap/blob/v0.30.7/src/OverlayTrigger.js# L221], lub możesz spróbować z tym [https://github.com/react-bootstrap/react-bootstrap/blob/v0.30.7/src/OverlayTrigger.js#L213] – Igorsvee

4

Funkcja ukrywania nie jest funkcją publiczną w OverlayTrigger. Ustaw <OverlayTrigger rootClose={true}..., a następnie na wyzwalaczu wywołania zdarzenia document.body.click().

+0

Bardzo sprytny. Dobra odpowiedź. –