React Base Fiddle (JSX)
Starting point for creating JSFiddles with React. This uses React with Addons.
HTML
<script src="http://fb.me/JSXTransformer-0.12.1.js"></script>
<script src="http://fb.me/react-with-addons-0.12.1.js"></script>
<script src="http://facebook.github.io/react/js/jsfiddle-integration.js"></script>
<div id="app"></div>
JavaScript 1.7
var Mutant = function Mutant (defaults, options) {
var parent = this;
var _evts = [];
var methods = {};
if (options && options.mixins) {
methods = options.mixins;
}
for (var k in defaults) {
this[k] = defaults[k];
}
methods.set = function (obj) {
for (var k in obj) {
parent[k] = obj[k];
}
if (options && options.validate) {
console.log(options.validate);
//console.log(options.validate.color());
}
methods.trigger("update", parent);
};
methods.on = function (trigger, cb) {
_evts[trigger] = cb;
};
methods.trigger = function (trigger, data) {
if (_evts[trigger]) {
_evts[trigger].call(this, data);
}
};
this.mutant = methods;
return this;
};
var post = new Mutant({
id: 0,
title: "",
content: ""
});
var comments = new Mutant({
comments: []
});
var App = React.createClass({
propTypes: {
post: React.PropTypes.shape({
id: React.PropTypes.number,
title: React.PropTypes.title,
content: React.PropTypes.content
}),
comments: React.PropTypes.shape({
comments: React.PropTypes.array
})
},
getDefaultProps: function () {
return {
post: post,
comments: comments
}
},
componentWillMount: function () {
var self = this;
post.mutant.on("update", function (data) {
self.setProps({post: data});
});
comments.mutant.on("update", function (data) {
self.setProps({comments: data});
});
},
render: function () {
return (
<div className="app">
<Post {...this.props.post} />
<Comments {...this.props.comments} />
</div>
);
}
});
var Post = React.createClass({
componentDidMount: function () {
this.props.mutant.set({id: 1, title: "title", content: "content"});
},
render: function ()...