[Kimchi-devel] [PATCH] [UI] Window Widget Enhancement - Allow onClose Listener

Aline Manera alinefm at linux.vnet.ibm.com
Mon Mar 10 13:12:42 UTC 2014


Reviewed-by: Aline Manera <alinefm at linux.vnet.ibm.com>

On 03/10/2014 01:59 AM, Hongliang Wang wrote:
> Sometimes we want to trigger some action when window is being closed.
> For example, we register some listeners in one window, and we want to
> unregister them after this window is closed, in this case we can take
> advantage of this feature.
>
> Signed-off-by: Hongliang Wang <hlwang at linux.vnet.ibm.com>
> ---
>   ui/js/src/kimchi.window.js | 14 ++++++++++----
>   1 file changed, 10 insertions(+), 4 deletions(-)
>
> diff --git a/ui/js/src/kimchi.window.js b/ui/js/src/kimchi.window.js
> index b32ab60..c2af63e 100644
> --- a/ui/js/src/kimchi.window.js
> +++ b/ui/js/src/kimchi.window.js
> @@ -17,6 +17,7 @@
>    */
>   kimchi.window = (function() {
>       var _windows = [];
> +    var _listeners = {};
>       var open = function(settings) {
>           var settings = jQuery.type(settings) === 'object' ? settings : {
>               url: settings
> @@ -29,6 +30,7 @@ kimchi.window = (function() {
>           }
>
>           _windows.push(windowID);
> +        _listeners[windowID] = settings['close'];
>           var windowNode = $('<div></div>', {
>               id: windowID,
>               'class': settings['class'] ? settings['class'] + ' bgmask' : 'bgmask'
> @@ -37,9 +39,6 @@ kimchi.window = (function() {
>           $(windowNode).css(settings['style'] || '');
>
>           $(windowNode).appendTo('body').on('click', '.window .close', function() {
> -            if (settings.close) {
> -                settings.close();
> -            }
>               kimchi.window.close();
>           });
>
> @@ -52,7 +51,14 @@ kimchi.window = (function() {
>       };
>
>       var close = function() {
> -        $('#' + _windows.pop()).fadeOut(100, function() {
> +        var windowID = _windows.pop();
> +        if(_listeners[windowID]) {
> +            _listeners[windowID]();
> +            _listeners[windowID] = null;
> +        }
> +        delete _listeners[windowID];
> +
> +        $('#' + windowID).fadeOut(100, function() {
>               $(this).remove();
>           });
>       };




More information about the Kimchi-devel mailing list