<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>The source code</title> <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" /> <script type="text/javascript" src="../resources/prettify/prettify.js"></script> <style type="text/css"> .highlight { display: block; background-color: #ddd; } </style> <script type="text/javascript"> function highlight() { document.getElementById(location.hash.replace(/#/, "")).className = "highlight"; } </script> </head> <body onload="prettyPrint(); highlight();"> <pre class="prettyprint lang-js"><span id='Ext-ux-FieldReplicator'>/** </span> * @class Ext.ux.FieldReplicator * <p>A plugin for Field Components which creates clones of the Field for as * long as the user keeps filling them. Leaving the final one blank ends the repeating series.</p> * <p>Usage:</p> * <pre><code> { xtype: 'combo', plugins: [ Ext.ux.FieldReplicator ], triggerAction: 'all', fieldLabel: 'Select recipient', store: recipientStore } * </code></pre> */ Ext.define('Ext.ux.FieldReplicator', { singleton: true, init: function(field) { // Assign the field an id grouping it with fields cloned from it. If it already // has an id that means it is itself a clone. if (!field.replicatorId) { field.replicatorId = Ext.id(); } field.on('blur', this.onBlur, this); }, onBlur: function(field) { var ownerCt = field.ownerCt, replicatorId = field.replicatorId, isEmpty = Ext.isEmpty(field.getRawValue()), siblings = ownerCt.query('[replicatorId=' + replicatorId + ']'), isLastInGroup = siblings[siblings.length - 1] === field, clone, idx; // If a field before the final one was blanked out, remove it if (isEmpty && !isLastInGroup) { Ext.Function.defer(field.destroy, 10, field); //delay to allow tab key to move focus first } // If the field is the last in the list and has a value, add a cloned field after it else if(!isEmpty && isLastInGroup) { if (field.onReplicate) { field.onReplicate(); } clone = field.cloneConfig({replicatorId: replicatorId}); idx = ownerCt.items.indexOf(field); ownerCt.add(idx + 1, clone); } } });</pre> </body> </html>