JQuery UI: How to call a widget function with its namespace

后端 未结 3 1559
半阙折子戏
半阙折子戏 2021-02-05 08:44

I created two custom JQuery UI widgets with same name but with different namespaces as given below: First widget:

$.widget(\'finance.dialog\',{....}); // this wa         


        
相关标签:
3条回答
  • 2021-02-05 09:16

    You can invoke a jQuery UI widget by its namespace like this:

    $.ui.dialog(null, $('div#something'));  // Default jQ UI dialog
    $.finance.dialog(null, $('div#something'));  // Your first custom dialog
    $.hr.dialog(null, $('div#something'));  // Your second custom dialog
    

    Use the first parameter, which is null in the example above, to send any options to the widget.

    0 讨论(0)
  • 2021-02-05 09:25

    I think these two functions can help in such case. The first load a widget by pointing to the function created by JQ on the namespace object. The second use the name directly which I think will not be conflict as long as name is unique.

            /**
             * Apply the JQuery UI widget on an element with the given selector
             * @param {String} emSelector selector
             * @param {String} namespace widget namespace
             * @param {String} widgetName widget name
             * @param {Object}[options] options options object or null
             */
            jqUIWidgetByNSAndName:function(emSelector, namespace, widgetName, options) {
                var em = $(emSelector);
                $[namespace][widgetName].call(em, options, em);
            },
    
    
            /**
             * Apply the JQuery UI widget on an element with the given selector
             * @param {String} emSelector selector
             * @param {String} widgetName widget name
             * @param {Object}[options] options options object or null
             */
            jqUIWidgetByName:function (emSelector, widgetName, options) {
                var em = $(emSelector);
                $.fn[widgetName].call(em, options);
            }
    
            //Example1 - with namespace
            this.jqUIWidgetByNSAndName("#abc", "cg", "WebsiteGlass", options);
    
            //Example2 - without namespace
            this.jqUIWidgetByName("#abc",  "WebsiteGlass", options);

    0 讨论(0)
  • 2021-02-05 09:26

    I had the same question, but I don't think it's possible to invoke a jquery ui widget with the namespace.

    If I understand correctly from this: http://bugs.jqueryui.com/ticket/7489 By defining widgets with the same name, it's by design to overwrite earlier definitions. Because regardless of namespace, the widgets are mapped with their name to $.fn.

    As suggested in the bug ticket you can use the bridge function to create a unique mapping to the specific namespaced widget and call it using the unique name.

    In your case, it can be like this:

    $.widget.bridge( "finance_dialog", $.finance.dialog );
    $.widget.bridge( "hr_dialog", $.hr.dialog );
    
    // then call it with...
    $( "div#something" ).hr_dialog(); 
    

    I suppose another way would be to create unique widget names in the first place.

    0 讨论(0)
提交回复
热议问题