I noticed that when creating a custom widget, the default options are
NOT deep copied to the options passed in during instantiation. For
example:

// Create the widget
$.widget('myWidget', {
    init: function (){
            /*
              At this point, given the defaults and the instantiation
below,
              I would expect the this.options to contain...
                 {
                      title: 'My Widget',
                      classes: {
                            'header':  '.my-widget-header',
                            'content': '.my-widget-content',
                            'footer': '.custom-widget-footer'
                      }
                  }

               Instead, this.options contains (because of no 'deep
copy')...
                 {
                      title: 'My Widget',
                      classes: {
                            'footer': '.custom-widget-footer'
                      }
                  }
            */
        }
    }
);


// Set the widget defaults
$.ui.myWidget.defaults = {
    title: 'My Widget',
    classes: {
        'header':  '.my-widget-header',
        'content': '.my-widget-content',
        'footer': '.my-widget-footer'
    }
}

// Widgefy an element on the page with id='my-widget'
var testWidget = $('#my-widget').myWidget({
    classes: {
         'footer': '.custom-widget-footer'
    }
});

Reply via email to