1. #1
    Sencha User tomalex0's Avatar
    Join Date
    Apr 2009
    Location
    San Jose, CA
    Posts
    589
    Vote Rating
    16
    tomalex0 will become famous soon enough

      0  

    Default Display Field for Form

    Display Field for Form


    I was looking for DisplayField inside in form, so i made a try to Extend. So far its working fine for me.

    I have posted my earlier code in
    http://www.sencha.com/forum/showthre...-Display-Field.

    Main thing if found interesting was that when the form is posted the value associated with displayfield could be passed to server side.


    Extension
    Code:
    Ext.form.DisplayField = Ext.extend(Ext.form.Field,  {
        ui: 'slider',
         /**
         * Set to true on all Ext.form.Field subclasses. This is used by {@link Ext.form.FormPanel#getValues} to determine which
         * components inside a form are fields.
         * @property isField
         * @type Boolean
         */
        isField: true,
        
        isFormField : true,
        
        /**
         * @cfg {Boolean/Function/Object} disclosure
         * True to display a disclosure icon on each list item.
         * This is just to show the disclosure icon to indicate a list is associated with the displayfield
         */
        disclosure : true,
        
        /**
         * @cfg {String} disclosureCls The CSS class to use to change disclosure icon image and its properties)
         */
        disclosureCls : 'x-field-disclosure',
         /**
         * @cfg {String} inputCls Overrides {@link Ext.form.Field}'s inputCls. Defaults to 'x-slider'
         */
        inputCls: 'x-displayfield',
        
        initComponent : function() {
            this.addEvents('displaytap');
            Ext.form.DisplayField.superclass.initComponent.call(this);
          
        },
        
        afterRender: function() {
            Ext.form.DisplayField.superclass.afterRender.call(this);
            this.mon(this.fieldEl, {
                tap: this.onTap,
                scope: this
            });
            if(this.disclosure){
              this.tagspec = {tag : 'div',cls : 'x-disclosure '+this.disclosureCls}
              Ext.DomHelper.insertAfter(this.fieldEl,this.tagspec);
            }
        },
        
       
        onTap : function(e){
            this.fireEvent('displaytap',this.originalValue,this.getValue());
        },
        
        /**
         * True to set the field DOM element autocorrect attribute to "on", false to set to "off". Defaults to undefined, leaving the attribute unset.
         * @cfg {Boolean} autoCorrect
         */
    
        renderTpl: [
            '<tpl if="label">',
                '<label <tpl if="fieldEl">for="{inputId}"</tpl>>{label}</label>',
            '</tpl>',
            '<div>',
            '<tpl if="fieldEl">',
                '<div id="{inputId}" name="{name}"  class="{fieldCls}""',
                '<tpl if="style">style="{style}" </tpl>',
            '></div></tpl>',
            '</div>',
            '<div class="x-field-mask"></div>'
        ],
        
        
        /**
         * Returns the normalized data value (undefined or emptyText will be returned as '').  To return the raw value see {@link #getRawValue}.
         * @return {Mixed} value The field value
         */
        getValue : function(){
            if (!this.rendered || !this.fieldEl) {
               
                return this.dom.innerHTML;
            }
            
            return this.fieldEl.dom.innerHTML || '';
        },
    
        /**
         * Sets a data value into the field and validates it.  To set the value directly without validation see {@link #setRawValue}.
         * @param {Mixed} value The value to set
         * @return {Ext.form.DisplayField} this
         */
        setValue : function(v){
            this.value = v;
            if (this.rendered && this.fieldEl) {
                this.fieldEl.dom.innerHTML = (Ext.isEmpty(v) ? '' : v);
            }
            return this;
        }
    });
    
    Ext.reg('displayfield', Ext.form.DisplayField);
    CSS
    Code:
    .x-field-slider .x-displayfield {
      position: relative;
      overflow: hidden;
      height: 2.5em;
      width:100%;
      margin: 0 .5em;
      padding-top : 0.7em;
      float:left;
      z-index:1;
    }
    .x-field-disclosure{
        position:absolute;
        top:0;
        right:0.3em;
        margin-top:0.4em;
    }
    Examples
    Code:
    {
                            xtype: 'displayfield',
                            name : 'name',
                            label: 'Name',
                            autoCapitalize : false,
                            value : 'test',
                            listeners :{
                                displaytap : function(o,v){
                                    alert(o+"-----"+v);
                                }
                            }
                        }
    Features
    Code:
    1. Tap Event for  displayfield
    2. Disclosure image similar to List.
    My actual requirement was to show a List when tapped on the displayField and after selecting value from the list the displayfield will be updated with that value.

  2. #2
    Sencha User tomalex0's Avatar
    Join Date
    Apr 2009
    Location
    San Jose, CA
    Posts
    589
    Vote Rating
    16
    tomalex0 will become famous soon enough

      0  

    Default Modified Display Field With respect to 0.96 version

    Modified Display Field With respect to 0.96 version


    Have updated the display field code w.r.t to 0.96

    Code:
    Ext.form.DisplayField = Ext.extend(Ext.form.Field,  {
         /**
         * Set to true on all Ext.form.Field subclasses. This is used by {@link Ext.form.FormPanel#getValues} to determine which
         * components inside a form are fields.
         * @property isField
         * @type Boolean
         */
        isField: true,
        
        isFormField : true,
        
        /**
         * @cfg {Boolean/Function/Object} disclosure
         * True to display a disclosure icon on each list item.
         * This is just to show the disclosure icon to indicate a list is associated with the displayfield
         */
        disclosure : true,
        
        /**
         * @cfg {String} disclosureCls The CSS class to use to change disclosure icon image and its properties)
         */
        disclosureCls : 'x-field-disclosure',
         /**
         * @cfg {String} inputCls Overrides {@link Ext.form.Field}'s inputCls. Defaults to 'x-slider'
         */
        inputCls: 'x-displayfield',
        
        initComponent : function() {
            this.addEvents('displaytap');
            Ext.form.DisplayField.superclass.initComponent.call(this);
          
        },
        
        afterRender: function() {
            Ext.form.DisplayField.superclass.afterRender.call(this);
            this.mon(this.el, {
                tap: this.onTap,
                scope: this
            });
            if(this.disclosure){
              this.tagspec = {tag : 'div',cls : 'x-disclosure '+this.disclosureCls}
              Ext.DomHelper.insertAfter(this.fieldEl,this.tagspec);
            }
        },
        
       
        onTap : function(e){
            this.fireEvent('displaytap',this.originalValue,this.getValue());
        },
        
        /**
         * True to set the field DOM element autocorrect attribute to "on", false to set to "off". Defaults to undefined, leaving the attribute unset.
         * @cfg {Boolean} autoCorrect
         */
    
        renderTpl: [
            '<tpl if="label">',
                '<label <tpl if="fieldEl">for="{inputId}"</tpl> class="x-form-label"><span>{label}</span></label>',
            '</tpl>',
            '<tpl if="fieldEl">',
                '<div id="{inputId}" name="{name}"  class="{fieldCls}"',
                '<tpl if="style">style="{style}" </tpl>',
            '></div></tpl>',
            '<div class="x-field-mask"></div>'
        ],
        
        
        /**
         * Returns the normalized data value (undefined or emptyText will be returned as '').  To return the raw value see {@link #getRawValue}.
         * @return {Mixed} value The field value
         */
        getValue : function(){
            if (!this.rendered || !this.fieldEl) {
               
                return this.dom.innerHTML;
            }
            
            return this.fieldEl.dom.innerHTML || '';
        },
    
        /**
         * Sets a data value into the field and validates it.  To set the value directly without validation see {@link #setRawValue}.
         * @param {Mixed} value The value to set
         * @return {Ext.form.DisplayField} this
         */
        setValue : function(v){
            this.value = v;
            if (this.rendered && this.fieldEl) {
                this.fieldEl.dom.innerHTML = (Ext.isEmpty(v) ? '' : v);
            }
            return this;
        }
    });
    
    Ext.reg('displayfield', Ext.form.DisplayField);
    CSS
    Code:
     .x-displayfield {
                    background-color:white;
                    padding: 0 .5em;
                    padding-top : 0.7em;
                    text-overflow: ellipsis;
                    overflow:hidden;
                    white-space: nowrap;
                    display: block;
                    font-weight:100 !important;
                }
                .x-field-disclosure{
                    position:absolute;
                    top:0;
                    right:0.8em;
                    margin-top:0.4em;
                }

    Updated Features.
    Code:
    Added tap event for whole field.
    Tackled text overflow

  3. #3
    Sencha User armode's Avatar
    Join Date
    Nov 2011
    Location
    Germany / Darmstadt
    Posts
    64
    Vote Rating
    4
    armode is on a distinguished road

      0  

    Default Displayfield for Sencha Touch 2?

    Displayfield for Sencha Touch 2?


    Hi,

    how can I get a displayfield working in ST2?
    There are several things deprecated and at the moment I got an error at the DomHelper element....

    Is there another way in ST2 to get a "displayfield" or has someone fixed it?

    Thanks

  4. #4
    Sencha User tomalex0's Avatar
    Join Date
    Apr 2009
    Location
    San Jose, CA
    Posts
    589
    Vote Rating
    16
    tomalex0 will become famous soon enough

      0  

    Default


    I dont' think we need something complex as above mentioned to implement a displayfield. You can use readOnly property to implement this. If you want it more like a component in ST2.

    Code:
    Ext.define('Ext.ux.displayfield', {
        extend : 'Ext.field.Text',
        alias : 'widget.displayfield',
        xtype : 'displayfield',
        config : {
            readOnly : true,
            clearIcon: false
        }
    });
    Sencha Touch Demos

    IosToggleField Forum - Github
    Form Validation
    Forum - Github
    Iphone Settings Menu
    Forum
    Sqlite Storage & Login Manifest
    Forum
    KitchenSink MVC
    Forum - Github
    SqliteProxy-v1 Forum - Github
    SqliteProxy-v2
    Forum - Github
    Arshaw Fullcalendar Forum - Github






  5. #5
    Sencha User armode's Avatar
    Join Date
    Nov 2011
    Location
    Germany / Darmstadt
    Posts
    64
    Vote Rating
    4
    armode is on a distinguished road

      0  

    Default


    Thanks that works fine!

    Do you know how to insert the disclosure icon?

    I appreciate your help...

  6. #6
    Sencha User
    Join Date
    Feb 2008
    Posts
    1
    Vote Rating
    0
    diego.girotto is on a distinguished road

      0  

    Default


    add a css to your page like this

    .x-field-disclosure{
    position:absolute;
    top:0;
    right:0.8em;
    margin-top:0.4em;
    overflow:visible;
    background-image:url(../images/image.png) !important;
    -webkit-mask: 0 0 url(../images/image.png) !important;
    background-color:transparent !important;
    -webkit-mask-size: 1.7em;
    width: 1.7em;
    height: 1.7em;
    }

    you have to change the "image.png" with the right image

  7. #7
    Sencha User armode's Avatar
    Join Date
    Nov 2011
    Location
    Germany / Darmstadt
    Posts
    64
    Vote Rating
    4
    armode is on a distinguished road

      0  

    Default


    Thanks for your help, but there's no div with a class named 'x-field-disclosure' at the moment, so I have to add one via the config part?

  8. #8
    Sencha User tomalex0's Avatar
    Join Date
    Apr 2009
    Location
    San Jose, CA
    Posts
    589
    Vote Rating
    16
    tomalex0 will become famous soon enough

      0  

    Default


    Try this
    Code:
    Ext.define('Ext.ux.displayfield', {
        extend : 'Ext.field.Text',
        alias : 'widget.displayfield',
        xtype : 'displayfield',
        config : {
            readOnly : true,
            clearIcon: false,
            component: {
                useMask: true
            },
            ui : 'select disclose'
        }
    });
    Code:
    .x-field-disclose .x-component-outer::after {
                    content: "";
                    position: absolute;
                    width: 1.7em;
                    height: 1.7em;
                    top: 37%;
                    left: auto;
                    right: 0.7em;
                    -webkit-mask-size: 1.7em;
                    -webkit-mask-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpFNkNCM0JGNTZFMjI2ODExQkNGQjkwMzk3MDc3MkZFQiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo3M0MzQUU1QUFDQkQxMURGOEQ2MUVDMjM0MzY2NTBDQSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo3M0MzQUU1OUFDQkQxMURGOEQ2MUVDMjM0MzY2NTBDQSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkU3Q0IzQkY1NkUyMjY4MTFCQ0ZCOTAzOTcwNzcyRkVCIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkU2Q0IzQkY1NkUyMjY4MTFCQ0ZCOTAzOTcwNzcyRkVCIi8+IDwvcmRmOkRlc2NyaXB0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');
                    margin-top: -0.5em;
                    background-color: #006BB6;
                    background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #50B7FF), color-stop(2%, #0080DA), color-stop(100%, #005692));
                    background-image: -webkit-linear-gradient(#50B7FF,#0080DA 2%,#005692);
                    background-image: linear-gradient(#50B7FF,#0080DA 2%,#005692);
                }
    Sencha Touch Demos

    IosToggleField Forum - Github
    Form Validation
    Forum - Github
    Iphone Settings Menu
    Forum
    Sqlite Storage & Login Manifest
    Forum
    KitchenSink MVC
    Forum - Github
    SqliteProxy-v1 Forum - Github
    SqliteProxy-v2
    Forum - Github
    Arshaw Fullcalendar Forum - Github






  9. #9
    Sencha User armode's Avatar
    Join Date
    Nov 2011
    Location
    Germany / Darmstadt
    Posts
    64
    Vote Rating
    4
    armode is on a distinguished road

      0  

    Default


    Thanks for your help, works fine!

  10. #10
    Sencha User
    Join Date
    Jan 2014
    Posts
    1
    Vote Rating
    0
    RaykoComSC is on a distinguished road

      0  

    Default


    Thank you.

Similar Threads

  1. Form Display Field
    By tomalex0 in forum Ext 2.x: Help & Discussion
    Replies: 1
    Last Post: 30 Aug 2010, 6:16 AM
  2. [Solved] form field gets value but does not display it
    By madkris in forum Ext 3.x: Help & Discussion
    Replies: 4
    Last Post: 13 Jul 2009, 1:13 AM
  3. How to display a store field as label in a form
    By impactmedia in forum Ext 2.x: Help & Discussion
    Replies: 1
    Last Post: 10 Sep 2008, 2:04 AM
  4. How to render custom display in form field?
    By comm in forum Ext 1.x: Help & Discussion
    Replies: 4
    Last Post: 18 Jun 2007, 7:23 AM

Thread Participants: 3