Start Building Professional
Web Apps Today


 
Categories Question details Back To List
Question  posted by Doug on Dec 03, 2009 11:31
open dhtmlx forum
dhtmlxwindow, managing reusable modal dialog

Hello,

I have a grid in a Layout. When I click on a cell I display a modal dialog using the following code. It works great the first time.

    if (stage == 1) {
            inputWindow.enableAutoViewport(true);
            var cell = myGrid.cellByIndex(rowId,cellInd);
            var x = myLayout.cells("c").getWidth();
            var y = myLayout.cells("c").getHeight();
            windowHandler = inputWindow.createWindow("changeWindow",0,0,300,250);
            inputWindow.window("changeWindow").center();
            windowHandler.keepInViewport(true);
            windowHandler.setModal(true);
            windowHandler.setText("Adjust Order");
            windowHandler.attachObject("changeDialog");
}

I then close the dialog using the "X" window decoration. If I click on another cell this code is re-entered and I get a Javascript error "Object required" within the dhtmlxwindow code. It fails on the "attachObject" call.

To work around this I decided to attach an "onClose" event to the window. It will call a function to hide the modal dialog (dhxWin.hide()). It hides the window but the Viewport is inactive.

Not sure what to do about this. Basically I don't want to keep creating/destroying a window to avoid any possible overhead.

Thanks.

-Doug


Answer posted by Alex (support) on Dec 04, 2009 01:20

Hello,

you can try to use the following approach to redefine "close" button behaviour:

windowHandler.button("close").close = function() {

  windowHandler.hide();
}

This method allows to hide/show the window on cell click instead of creating the new window eahc time.  So, windowHandler = inputWindow.createWindow("changeWindow",0,0,300,250); ... code should be executed only once. And on click event handler should just call windowHandler.show(); 

Answer posted on Dec 04, 2009 05:42

Yes, but if it's a modal window and you "hide" it then the background is still unclickable.  On the events I had to do the following, which is a bit odd:

onClose: 

windowHandler.setModal(false);

windowHandler.hide();

onEditCell:

windowHandler.setModal(true);

windowHandler.show();

If I don't do this then I can't click on anything in the background after the onClose.  In my opinion this is a bug.  When a modal dialog is hidden the background should not be disabled.

Answer posted by Alex (support) on Dec 04, 2009 06:03

The background is automatically disabled only when modal window closes. The hide() method doesn't close the window. So, it is necessary to call setModal method manually.