[CLOSED] Breaking Change in latest SVN

  1. #1

    [CLOSED] Breaking Change in latest SVN

    I hadn't updated the libs in a month or so, and when I got the RC I found several breaking changes (most were documented, but changes to the Panel/Container inheritance structure was not and caused several breaking changes too)

    However I am still stuck on one bug.

    The code below is actually a repost (with 1 change) from the thread:
    http://forums.ext.net/showthread.php...Target-support

    If I go back to the old libs (~5 weeks ago), the original example works.

    With the new libs, the onRender override would fail because this.el was null. I looked at the newer onRender for CompositeField see that it now calls 'innterCt.render(ct)' first so I added that line. Now it doesn't fail, but it renders nothing. Actually the divs are all there, but they seem invisible or something.

    How can I get this example working again using the new libs?


    <%@ Page Language="C#" CodeBehind="Test.aspx.cs" Inherits="CustomField.Test" %>
    <%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    <html xmlns="http://www.w3.org/1999/xhtml"> 
      <head id="Head1" runat="server">     
        <title></title>           
        <script runat="server">        
         public class MyCompositeField : CompositeField         
         {             
          public MyCompositeField() { }               
          public override string XType  { get { return "ux.mycompositefield"; } }                           
          public override string InstanceOf { get { return "Ext.ux.MyCompositeField"; } }               
         
          [System.ComponentModel.Browsable(false)]             
          [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]             
          [System.ComponentModel.DesignerSerializationVisibility(System.ComponentModel.DesignerSerializationVisibility.Hidden)]             
          [System.Xml.Serialization.XmlIgnore]             
          [Newtonsoft.Json.JsonIgnore]             
          public override ConfigOptionsCollection ConfigOptions 
          {                 
            get                 
            {                     
             ConfigOptionsCollection list = base.ConfigOptions;                       
             list.Add("container", new ConfigOption("container", new SerializationOptions("innerCt", typeof(LazyControlJsonConverter)), null, this.Container));                                           
             return list;                 
            }             
          }               
          private Container container;               
          [PersistenceMode(PersistenceMode.InnerProperty)]         
          public Container Container             
          {                
            get                
            {                     
              if (this.container == null)                     
              {                         
                this.container = new Container();                    
              }                       
              return this.container;                 
            }             
          }               
          protected override void CreateChildControls()             
          {                 
            this.Controls.Add(this.Container);                
            this.LazyItems.Add(this.Container);             
          }         
        } 
                  
        protected void Page_Init(object sender, EventArgs e)         
        {             
          FormPanel mainForm = new FormPanel { Width = Unit.Pixel(600), DefaultAnchor = "-4", ID = "mainFormId" };              
          mainForm.Items.Add(new Ext.Net.TextField { FieldLabel = "TextField1", ID = "textField1Id", MsgTarget = Ext.Net.MessageTarget.Under }); 
          mainForm.Items.Add(new MyCompositeField {                 
            FieldLabel = "NameField2",               
            ID = "nameField1Id",                
            MsgTarget = Ext.Net.MessageTarget.Under,                
            Container = { Layout="Container", Items = { new CustomNameField1()}}          
          });                             
            
          Ext.Net.Button markButton = new Ext.Net.Button { Text = "Mark Invalid" };             
          Ext.Net.Button clearButton = new Ext.Net.Button { Text = "Clear Invalid" };             
          markButton.Listeners.Click.Fn = "markInvalid";            
          clearButton.Listeners.Click.Fn = "clearInvalid";            
          mainForm.Buttons.Add(markButton);           
          mainForm.Buttons.Add(clearButton);             
          
          Form.Controls.Add(new ResourceManager { ScriptMode = Ext.Net.ScriptMode.Debug });       
          Form.Controls.Add(mainForm);   
        }                  
        public class CustomNameField1 : FormPanel         
        {             
          private TextField _firstName = new TextField { Flex = 1, };             
          private TextField _initials = new TextField { Width = Unit.Pixel(40) };             
          private TextField _lastName = new TextField { FieldLabel = "Last", ID = "cnf1_lastName", MsgTarget = MessageTarget.Under };    
          private TextField _logon = new TextField { FieldLabel = "Logon" };         
          private TextField _email = new TextField { FieldLabel = "Email" };      
          private TextField _nickname = new TextField { FieldLabel = "Alias" };     
          private FieldSet _fieldSet = new FieldSet { Title = "Other Name Fields", Collapsible = true, Collapsed = true };       
          
          public CustomNameField1()     
          {               
            base.Cls = "my-nameField1";         
            base.Border = false;             
            base.DefaultAnchor = "-4";             
            base.LabelWidth = 40;               
            base.IsFormField = true;                 
            base.Items.Add(new Ext.Net.CompositeField {                   
              FieldLabel = "First",            
              Items ={      
                _firstName,       
                new DisplayField{Text="Initials"},   
                _initials   
              }          
            });           
            base.Items.Add(_lastName);   
            _fieldSet.Items.Add(new FormPanel { Items = { _logon, _email, _nickname }, DefaultAnchor = "-4" });   
            base.Items.Add(_fieldSet);         
          }     
        }   
    </script>        
    <ext:ResourcePlaceHolder ID="ResourcePlaceHolder1" runat="server" Mode="ScriptFiles" />       
    <script type="text/javascript">        
      Ext.ux.MyCompositeField = Ext.extend(Ext.form.CompositeField, 
      {            
        onRender: function(ct, position) 
        {                
          if (!this.el) {                     
            var configCt = Ext.apply(Ext.isArray(this.innerCt) ? this.innerCt[0] : this.innerCt, {renderTo: ct});                     
            var innerCt = this.innerCt = Ext.ComponentMgr.create(configCt, "container");                       
            
            innerCt.render(ct); // only change from original example.  Otherwise the next line leaves this.el == null
            this.el = innerCt.getEl();                      
            
            var fields = innerCt.findBy(function(c) {                         
              return c.isFormField;                     
            }, this);     
          
          var items = new Ext.util.MixedCollection();         
          items.addAll(Ext.isArray(this.items) ? this.items : [this.items]);       
          this.items = items;     
          if (this.combineErrors) 
          {  
            this.eachItem(function (field) {                             
              Ext.apply(field, {                                 
                markInvalid  : this.onFieldMarkInvalid.createDelegate(this, [ field ], 0),                                 
                clearInvalid : this.onFieldClearInvalid.createDelegate(this, [ field ], 0)                             
              });                         
            });                     
          }                                           
          if (this.items) 
          {                        
            for (var i = 0, len = this.items.length; i < len; i++) {                           
            var item = this.items.get(i);                                                  
            if (!item.getName) 
            {                             
              item.getName = Ext.emptyFn;                          
            }                       
          }                
        }                      
        var l = this.el.parent().parent().child("label", true);                                          
        if (l && this.fields && this.fields.length > 0) 
        {                        
          l.setAttribute("for", this.fields[0].id);                  
        }                 
      }                  
      Ext.ux.MyCompositeField.superclass.onRender.apply(this, arguments);             
    }         
    });           
    Ext.reg('ux.mycompositefield', Ext.ux.MyCompositeField);       
    </script>           
      <script type="text/javascript">       
        function markInvalid()       
        {         
          Ext.getCmp('nameField1Id').markInvalid('name1 bad');        
          Ext.getCmp('textField1Id').markInvalid('text1 bad');        
          Ext.getCmp('cnf1_lastName').markInvalid('LName bad');     
        }       
        function clearInvalid()      
        {        
          Ext.getCmp('nameField1Id').clearInvalid();       
          Ext.getCmp('textField1Id').clearInvalid();       
          Ext.getCmp('cnf1_lastName').clearInvalid();     
        }    
      </script>     
      <style type="text/css">       
        .my-nameField1       
        {         
        border: solid 1px #91A7B4;        
        padding-left:4px;        
        padding-top:4px;        
        padding-bottom:4px;      
      }       
      </style> 
      </head> 
      <body>    
        <form id="form2" runat="server">              </form> 
      </body> 
    </html>
    Last edited by geoffrey.mcgill; Nov 25, 2010 at 5:34 PM. Reason: [CLOSED]
  2. #2
    I'm reviewing your code, although we might need to wait for Vladimir to come back online to provide some feedback.

    Here's a cleaned up version of the original code sample. Still renders with the same issue.

    Example

    <%@ Page Language="C#" %>
    
    <%@ Import Namespace="Button=Ext.Net.Button" %>
    <%@ Import Namespace="Container=Ext.Net.Container" %>
    <%@ Import Namespace="System.ComponentModel" %>
    <%@ Import Namespace="System.ComponentModel" %>
    <%@ Import Namespace="System.Xml.Serialization" %>
    <%@ Import Namespace="Newtonsoft.Json" %>
    
    <%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %>
    
    <script runat="server">        
        public class MyCompositeField : CompositeField         
        {             
            public MyCompositeField() { }
            
            public override string XType 
            { 
                get 
                { 
                    return "ux.mycompositefield"; 
                }
            }
            
            public override string InstanceOf 
            { 
                get 
                { 
                    return "Ext.ux.MyCompositeField";
                }
            }
    
            [Browsable(false)]
            [EditorBrowsable(EditorBrowsableState.Never)]             
            [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]             
            [XmlIgnore]
            [JsonIgnore]
            public override ConfigOptionsCollection ConfigOptions 
            {
                get
                {
                    ConfigOptionsCollection list = base.ConfigOptions;
                    
                    list.Add("container", new ConfigOption("container", new SerializationOptions("innerCt", typeof(LazyControlJsonConverter)), null, this.Container));
                    
                    return list;
                }
            }
            
            private Container container;
            
            [PersistenceMode(PersistenceMode.InnerProperty)]
            public Container Container
            {
                get
                {
                    if (this.container == null)
                    {
                        this.container = new Container();
                    }
    
                    return this.container;
                }
            }
    
            protected override void CreateChildControls()
            {
                this.Controls.Add(this.Container);
                this.LazyItems.Add(this.Container);
            }
        }
    
        protected void Page_Init(object sender, EventArgs e)         
        {             
            FormPanel formPanel = new FormPanel 
            { 
                ID = "FormPanel1",
                Width = Unit.Pixel(600),
                DefaultAnchor = "-4",
            };
            
            formPanel.Items.Add(new TextField 
            { 
                FieldLabel = "TextField1", 
                ID = "TextField1", 
                MsgTarget = MessageTarget.Under 
            }); 
            
            formPanel.Items.Add(new MyCompositeField 
            {
                ID = "MyCompositeField1",
                FieldLabel = "NameField2",
                MsgTarget = MessageTarget.Under,
                Container = 
                {
                    Layout = "Container", 
                    Items = 
                    {
                        new CustomNameField()
                    }
                }
            });
    
            Button markButton = new Button { Text = "Mark Invalid" };
            Button clearButton = new Button { Text = "Clear Invalid" };
            
            markButton.Listeners.Click.Fn = "markInvalid";
            clearButton.Listeners.Click.Fn = "clearInvalid";
            
            formPanel.Buttons.Add(markButton);
            formPanel.Buttons.Add(clearButton);
    
            this.Form.Controls.Add(new ResourceManager()); 
            this.Form.Controls.Add(formPanel);
        }
        
        public class CustomNameField : FormPanel
        {
            private TextField firstName = new TextField { Flex = 1, };
            private TextField initials = new TextField { Width = Unit.Pixel(40) };
            
            private TextField lastName = new TextField 
            {
                ID = "TextField2",
                FieldLabel = "Last", 
                MsgTarget = MessageTarget.Under 
            };
        
            private TextField logon = new TextField { FieldLabel = "Logon" };
            private TextField email = new TextField { FieldLabel = "Email" };
            private TextField nickname = new TextField { FieldLabel = "Alias" };
            
            private FieldSet fieldSet = new FieldSet 
            { 
                Title = "Other Name Fields", 
                Collapsible = true, 
                Collapsed = true 
            };
    
            public CustomNameField()
            {
                base.Cls = "myCls";
                base.Border = false;
                base.DefaultAnchor = "-4";
                base.LabelWidth = 40;
                base.IsFormField = true;
    
                base.Items.Add(new CompositeField {
                    FieldLabel = "First",
                    Items = {
                        firstName,
                        new DisplayField { Text = "Initials" },
                        initials
                    }
                });
                
                base.Items.Add(lastName);
                
                fieldSet.Items.Add(new FormPanel 
                { 
                    Items = { 
                        logon, 
                        email, 
                        nickname 
                    }, 
                    DefaultAnchor = "-4" 
                });
                
                base.Items.Add(fieldSet);
            }
        }
    </script>
        
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
      <head runat="server">     
        <title>Ext.NET Ecxample</title>       
        
        <ext:ResourcePlaceHolder runat="server" Mode="ScriptFiles" />
        
        <script type="text/javascript">        
            Ext.ux.MyCompositeField = Ext.extend(Ext.form.CompositeField, {
                onRender : function (ct, position) {
                    if (!this.el) {
                        var configCt = Ext.apply(Ext.isArray(this.innerCt) ? this.innerCt[0] : this.innerCt, {
                            renderTo : ct
                        });
                        
                        var innerCt = this.innerCt = Ext.ComponentMgr.create(configCt, "container");
                        
                        innerCt.render(ct); // only change from original example.  Otherwise the next line leaves this.el == null
                        
                        this.el = innerCt.getEl();
                        
                        var fields = innerCt.findBy(function (c) {
                                return c.isFormField;
                            },
                            this);
                            
                        var items = new Ext.util.MixedCollection();
                        
                        items.addAll(Ext.isArray(this.items) ? this.items : [ this.items ]);
                        
                        this.items = items;
                        
                        if (this.combineErrors) {
                            this.eachItem(function (field) {
                                Ext.apply(field, {
                                    markInvalid  : this.onFieldMarkInvalid.createDelegate(this, [ field ], 0),
                                    clearInvalid : this.onFieldClearInvalid.createDelegate(this, [ field ], 0)
                                });
                            });
                        }
                        
                        if (this.items) {
                            for (var i = 0, len = this.items.length; i < len; i++) {
                                var item = this.items.get(i);
                                
                                if (!item.getName) {
                                    item.getName = Ext.emptyFn;
                                }
                            }
                        }
                        
                        var label = this.el.parent().parent().child("label", true);
                        
                        if (label && this.fields && this.fields.length > 0) {
                            label.setAttribute("for", this.fields[0].id);
                        }
                    }
                    
                    Ext.ux.MyCompositeField.superclass.onRender.apply(this, arguments);
                }
            });
            
            Ext.reg("ux.mycompositefield", Ext.ux.MyCompositeField);     
        </script>
        
        <script type="text/javascript">
            var markInvalid = function () {
                MyCompositeField1.markInvalid("MyCompositeField1 Error");
                TextField1.markInvalid("TextField1 Error");
                TextField2.markInvalid("TextField2 Error");
            };
    
            var clearInvalid = function () {
                MyCompositeField1.clearInvalid();
                TextField1.clearInvalid();
                TextField2.clearInvalid();
            };
        </script>
        
        <style type="text/css">
            .myCls {
                border         : solid 1px #91A7B4;
                padding-left   : 4px;
                padding-top    : 4px;
                padding-bottom : 4px;
            }       
        </style> 
    </head> 
    <body>    
        <form runat="server"></form> 
    </body> 
    </html>
    Geoffrey McGill
    Founder
  3. #3
    Hi Randy,

    ok, I think I have this one figured out.

    Maybe there was a recent change by the ExtJS team, but in the current Ext.form.CompositeField's .initComponent function the .innerCt property is hardcoded to use an internal Ext.Container object.

    When you pass a custom .innerCt config object within your MyCompositeField class, that value is getting stomped on during .initComponent. Within your custom .onRender function, the .innerCt being used is the base inner Container, and not the custom Container object.

    The fix is easy... just rename your .innerCt config object to something else. I renamed to "configCt".

    Here's the full working sample with the new "configCt" config object.

    Example

    <%@ Page Language="C#" %>
    
    <%@ Import Namespace="Button=Ext.Net.Button" %>
    <%@ Import Namespace="Container=Ext.Net.Container" %>
    <%@ Import Namespace="System.ComponentModel" %>
    <%@ Import Namespace="System.ComponentModel" %>
    <%@ Import Namespace="System.Xml.Serialization" %>
    <%@ Import Namespace="Newtonsoft.Json" %>
    
    <%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %>
    
    <script runat="server">        
        public class MyCompositeField : CompositeField         
        {             
            public MyCompositeField() { }
            
            public override string XType 
            { 
                get 
                { 
                    return "ux.mycompositefield"; 
                }
            }
            
            public override string InstanceOf 
            { 
                get 
                { 
                    return "Ext.ux.MyCompositeField";
                }
            }
    
            [Browsable(false)]
            [EditorBrowsable(EditorBrowsableState.Never)]             
            [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]             
            [XmlIgnore]
            [JsonIgnore]
            public override ConfigOptionsCollection ConfigOptions 
            {
                get
                {
                    ConfigOptionsCollection list = base.ConfigOptions;
    
                    list.Add("container", new ConfigOption("container", new SerializationOptions("configCt", typeof(LazyControlJsonConverter)), null, this.Container));
                    
                    return list;
                }
            }
            
            private Container container;
            
            [PersistenceMode(PersistenceMode.InnerProperty)]
            public Container Container
            {
                get
                {
                    if (this.container == null)
                    {
                        this.container = new Container();
                    }
    
                    return this.container;
                }
            }
    
            protected override void CreateChildControls()
            {
                this.Controls.Add(this.Container);
                this.LazyItems.Add(this.Container);
            }
        }
    
        protected void Page_Init(object sender, EventArgs e)         
        {             
            FormPanel form = new FormPanel 
            { 
                ID = "FormPanel1",
                Padding = 5,
                Width = Unit.Pixel(600),
                DefaultAnchor = "-4",
            };
            
            form.Items.Add(new TextField 
            { 
                FieldLabel = "TextField1", 
                ID = "TextField1", 
                MsgTarget = MessageTarget.Under 
            }); 
            
            form.Items.Add(new MyCompositeField 
            {
                ID = "MyCompositeField1",
                FieldLabel = "NameField2",
                MsgTarget = MessageTarget.Under,
                Container = 
                {
                    Layout = "Container", 
                    Items = 
                    {
                        new CustomNameField()
                    }
                }
            });
    
            Button markButton = new Button { Text = "Mark Invalid" };
            Button clearButton = new Button { Text = "Clear Invalid" };
    
            markButton.Listeners.Click.Fn = "markInvalid";
            clearButton.Listeners.Click.Fn = "clearInvalid";
            
            form.Buttons.Add(markButton);
            form.Buttons.Add(clearButton);
    
            this.Form.Controls.Add(new ResourceManager { 
                IDMode = IDMode.Explicit
            }); 
            this.Form.Controls.Add(form);
        }
        
        public class CustomNameField : FormPanel
        {
            private TextField firstName = new TextField { Flex = 1, };
            private TextField initials = new TextField { Width = Unit.Pixel(40) };
            
            private TextField lastName = new TextField 
            {
                ID = "TextField2",
                FieldLabel = "Last", 
                MsgTarget = MessageTarget.Under 
            };
        
            private TextField logon = new TextField { FieldLabel = "Logon" };
            private TextField email = new TextField { FieldLabel = "Email" };
            private TextField nickname = new TextField { FieldLabel = "Alias" };
            
            private FieldSet fieldSet = new FieldSet 
            { 
                Title = "Other Name Fields",
                Collapsible = true, 
                Collapsed = true 
            };
    
            public CustomNameField()
            {
                this.Cls = "myCls";
                this.Border = false;
                this.DefaultAnchor = "-4";
                this.LabelWidth = 40;
                this.IsFormField = true;
    
                this.Items.Add(new CompositeField {
                    FieldLabel = "First",
                    Items = {
                        firstName,
                        new DisplayField { Text = "Initials" },
                        initials
                    }
                });
                
                this.Items.Add(lastName);
                
                fieldSet.Items.Add(new FormPanel 
                {
                    Padding = 5,
                    Border = false,
                    Items = { 
                        logon, 
                        email, 
                        nickname 
                    }, 
                    DefaultAnchor = "-4" 
                });
                
                this.Items.Add(fieldSet);
            }
        }
    </script>
        
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
      <head runat="server">     
        <title>Ext.NET Ecxample</title>       
        
        <ext:ResourcePlaceHolder runat="server" Mode="ScriptFiles" />
        
        <script type="text/javascript">
            Ext.ux.MyCompositeField = Ext.extend(Ext.form.CompositeField, {
                onRender : function (ct, position) {
                    if (!this.el) {
                        var configCt = Ext.apply(Ext.isArray(this.configCt) ? this.configCt[0] : this.configCt, {
                            renderTo : ct
                        });
                        
                        var innerCt = this.innerCt = Ext.ComponentMgr.create(configCt);
                        
                        innerCt.render(ct); // only change from original example.  Otherwise the next line leaves this.el == null
                        
                        this.el = innerCt.getEl();
                        
                        var fields = innerCt.findBy(function (c) {
                                return c.isFormField;
                            },
                            this);
                            
                        var items = new Ext.util.MixedCollection();
                        
                        items.addAll(Ext.isArray(this.items) ? this.items : [ this.items ]);
                        
                        this.items = items;
                        
                        if (this.combineErrors) {
                            this.eachItem(function (field) {
                                Ext.apply(field, {
                                    markInvalid  : this.onFieldMarkInvalid.createDelegate(this, [ field ], 0),
                                    clearInvalid : this.onFieldClearInvalid.createDelegate(this, [ field ], 0)
                                });
                            });
                        }
                        
                        if (this.items) {
                            for (var i = 0, len = this.items.length; i < len; i++) {
                                var item = this.items.get(i);
                                
                                if (!item.getName) {
                                    item.getName = Ext.emptyFn;
                                }
                            }
                        }
                        
                        var label = this.el.parent().parent().child("label", true);
                        
                        if (label && this.fields && this.fields.length > 0) {
                            label.setAttribute("for", this.fields[0].id);
                        }
                    }
                    
                    Ext.ux.MyCompositeField.superclass.onRender.apply(this, arguments);
                }
            });
            
            Ext.reg("ux.mycompositefield", Ext.ux.MyCompositeField);
        </script>
        
        <script type="text/javascript">
            var markInvalid = function () {
                MyCompositeField1.markInvalid("MyCompositeField1 Error");
                TextField1.markInvalid("TextField1 Error");
                TextField2.markInvalid("TextField2 Error");
            };
    
            var clearInvalid = function () {
                MyCompositeField1.clearInvalid();
                TextField1.clearInvalid();
                TextField2.clearInvalid();
            };
        </script>
        
        <style type="text/css">
            .myCls {
                border         : solid 1px #91A7B4;
                padding-left   : 4px;
                padding-top    : 4px;
                padding-bottom : 4px;
            }       
        </style> 
    </head> 
    <body>    
        <form runat="server"></form> 
    </body> 
    </html>
    Clickety Click?Barba Trick

    Hope this helps.
    Geoffrey McGill
    Founder
  4. #4
    Geoffrey;

    Thanks, that did it.
  5. #5
    Geoffrey;

    One more thing regarding breaking changes.

    The Container base classes have been changed such that Container no longer has .Padding and .BodyCssClass properties. I was using this in this custom field.

    Can these Container properties be put back?
  6. #6
    Hi Randy,

    Thanks for the update.

    I'll investigate the .Padding and .BodyClass properties. Both of these are documented to start in Panel and by default should not be available in Container. That said, I seem to remember that we might have worked around this limitation somehow. I will look into the history and get back to you.
    Geoffrey McGill
    Founder
  7. #7
    Geoffrey;

    I have worked around it for now and am not having any problems (so far). So no urgency.

    Thanks,
    Last edited by geoffrey.mcgill; Nov 25, 2010 at 5:28 PM.
  8. #8
    Hi Randy,

    I looked into the issue of the missing .Padding and .BodyClass properties. This issue is related to your original comments about the Container>PanelBase inheritance Breaking Change.

    The Container should not have been inheriting from PanelBase, and we fixed that defect before the v1.0RC1 release. By removing the PanelBase inheritance, it also removed access to the .Padding and .BodyClass properties.

    I'll add a note regarding this Breaking Change into the CHANGELOG.txt.

    The easiest work-around is to change your <ext:Container> into an <ext:Panel>.

    Thanks again for pointing out the issue.
    Geoffrey McGill
    Founder
  9. #9
    Hi,

    Container has no body therefore BodyCssClass == Cls. Please use Cls for Container

Similar Threads

  1. [CLOSED] v2 Changes (breaking or otherwise)
    By peter.campbell in forum 2.x Legacy Premium Help
    Replies: 3
    Last Post: Jan 11, 2012, 10:37 PM
  2. Coolite 0.8 breaking changes
    By r_honey in forum Open Discussions
    Replies: 11
    Last Post: Jun 22, 2009, 5:16 AM

Posting Permissions