Réagir (Facebook): de l'état à gestion contrôlée des cases à cocher

Je vais avoir un petit problème lors de la tentative de créer une case à cocher qui permet de sélectionner et de désélectionner les autres cases individuelles (sélectionner/désélectionner tout) avec Réagir. J'ai lu http://facebook.github.io/react/docs/forms.html et découvert qu'il existe des différences entre contrôlé et pas contrôlée <input>s. Mon test de code est comme suit:

var Test = React.createClass({
getInitialState: function() {
return {
data: [
{ id: 1, selected: false },
{ id: 2, selected: false },
{ id: 3, selected: false },
{ id: 4, selected: false }
]
};
},
render: function() {
var checks = this.state.data.map(function(d) {
return (
<div>
<input type="checkbox" data-id={d.id} checked={d.selected} onChange={this.__changeSelection} />
{d.id}
<br />
</div>
);
});
return (
<form>
<input type="checkbox" ref="globalSelector" onChange={this.__changeAllChecks} />Global selector
<br />
{checks}
</form>
);
},
__changeSelection: function(e) {
var id = e.target.getAttribute('data-id');
var state = this.state.data.map(function(d) {
return {
id: d.id,
selected: (d.id === id ? !d.selected : d.selected)
};
});
this.setState({ data: state });
},
__changeAllChecks: function(e) {
var value = this.refs.globalSelector.getDOMNode().checked;
var state = this.state.data.map(function(d) {
return { id: d.id, selected: value };
});
this.setState({ data: state });
}
});
React.renderComponent(<Test />, document.getElementById('content'));

Le "sélecteur Global" fonctionne comme prévu: lorsqu'il est sélectionné, tous les autres contrôles sont sélectionnés. Le problème est que le __changeSelection() gestionnaire n'est pas déclenché lorsque l'une des autres cases sont cliqués.

Je ne sais pas quelle est la méthode appropriée pour faire ce travail. Peut-être Réagir modèle n'est pas le meilleur pour modéliser ce type d'interaction? Que pouvais-je faire?

Merci d'avance

InformationsquelleAutor matheus.emm | 2014-02-05