Ractive Dynamic Components

Send Data to individual component

by vikikamath

HTML

<script id='template' type='text/ractive'>
   	<button on-click="addComponent">Add</button>
 		<div>
   		<input type="text" value="{{textdata}}" placeholder="Send Text to current component" width="900" on-blur="sendDataToCurrentComponent"/>
   	</div>
    {{#each list}}
    <input type='radio' name='{{name}}' value='{{.}}'>{{.}}
    {{/each}}
    <br>
    <dynamic name='{{name}}'/>
       
</script>

<main></main>

JavaScript

// Inspired by http://stackoverflow.com/a/31080919/405117
var mapper = {
	'A': function(instanceId){
  	var handleAData;
  	return Ractive.extend({ 
  			template: 'I am A this is my data: <ul>{{#datas}}<li>{{.}}</li>{{/datas}}</ul>',
        data: {
        	datas:[]
        },
        onrender: function() {
        	handleAData = function(txt){
          	this.push('datas', txt);
          }.bind(this);
          
        	r.on(instanceId, handleAData);
        },
        onunrender: function() {
        	r.off(instanceId, handleAData);
        }
  	});
  }
  ,'B': function(instanceId){
  	var handleBData;
  	return Ractive.extend({ 
  			template: 'I am B this is my data: <ul>{{#datas}}<li>{{.}}</li>{{/datas}}</ul>',
        data: {
        	datas:[]
        },
        onrender: function() {
        	handleBData = function(txt){
          	this.push('datas', txt);
          }.bind(this);
          
        	r.on(instanceId, handleBData);
        },
        onunrender: function() {
        	r.off(instanceId, handleBData);
        }
  	});
  }
  ,'C': function(instanceId){
  	var handleCData;
  	return Ractive.extend({ 
  			template: 'I am C this is my data: <ul>{{#datas}}<li>{{.}}</li>{{/datas}}</ul>',
        data: {
        	datas:[]
        },
        onrender: function() {
        	handleCData = function(txt){
          	this.push('datas', txt);
          }.bind(this);
          
        	r.on(instanceId, handleCData);
        },
        onunrender: function() {
        	r.off(instanceId, handleCData);
        }
  	});
  }
  ,'D': function(instanceId){
  	var handleDData;
  	return Ractive.extend({ 
  			template: 'I am D this is my data: <ul>{{#datas}}<li>{{.}}</li>{{/datas}}</ul>',
        data: {
        	datas:[]
        },
        onrender: function() {
        	handleDData = function(txt){
          	this.push('datas', txt);
          }.bind(this);
          
        	r.on(instanceId, handleDData);
        },
        onunrender: function() {
       ...