JSFiddle - React, Tailwind, and code Playground
by rich_harris
HTML
<main></main>
<script id='template' type='text/ractive'>
<h1>Hello {{name}}!</h1>
<p>We're using Ractive.js version {{version}}</p>
</script>
CSS
body {
font-family: 'Helvetica Neue', arial, sans-serif;
font-weight: 200;
color: #353535;
}
h1, h2, h3, h4, h5, h6 {
font-weight: 200;
}
.error {
color: #d00;
font-family: monospace;
}
JavaScript
Ractive.prototype.once = function ( eventName, handler ) {
var listener = this.on( eventName, function () {
handler.apply( this, arguments );
listener.cancel();
});
return listener; // so we can still do listener.cancel() manually
};
Ractive.prototype.observeOnce = function ( property, callback, options ) {
var observer = this.observe( property, function () {
callback.apply( this, arguments );
observer.cancel();
}, { init: false, defer: options && options.defer });
return observer;
};
var ractive = new Ractive({
el: 'main',
template: '#template',
data: {
name: 'world', version: Ractive.VERSION
}
});
ractive.once( 'myEvent', function ( message ) {
console.log( 'myEvent was called with %s', message );
});
ractive.fire( 'myEvent', 'the first message' );
ractive.fire( 'myEvent', 'the second message, which should be ignored' );
ractive.observeOnce( 'name', function ( newName, oldName ) {
console.log( 'name changed from %s to %s', oldName, newName );
});
ractive.set( 'name', 'everybody' );
ractive.set( 'name', 'mum' );