How to Prevent Panel Navigation when Controls are Dirty

Description

In an application with multiple panel cards, navigation to other panel cards can be prevented if the controls on a panel have not been saved.

Discussion

A common design pattern in a mobile application is to have multiple Panel Cards inside a Panel Navigator. If one Panel Card contains a form, you might want to prevent the user from navigating to another Panel Card if the form has been edited, but not yet been saved.

The Panel Navigator's onBeforePanelActivate client-side event can be used to add validation to the application to prevent navigation if the UX Component is dirty. You can check the value of {dialog.object}._isDirty to determine whether or not UX component has unsaved chaanges. If any edits have been made to controls in the UX Component, {dialog.object}._isDirty will be true. Otherwise, it will have a value of false.

For example, in the following code, if the UX component is dirty, a message box is shown informing the user that they must save their changes before they can navigate away from the current panel card:

if ({dialog.object}._isDirty) {
    var title = "Notice";
    var html = '<div style="padding:15pt;">Please save your changes before leaving this panel.</div>';
    var buttons = [{html: 'OK', value: 'ok'}];
    var onClose = function (btn) {
        if (button === 'ok') {
            setTimeout(function () {
                //ok button handler
                alert('user pressed ok');
            }, 10);
    };

    A5.msgBox.show(title,html,buttons,onClose);

    return false;
}

The same technique can also be used in a PanelLayout. For a full explanation and step-by-step instructions on how to use the onBeforePanelActivate client-side event to prevent a user from navigating away from a Panel with unsaved changes, watch the video below:

Click here to download the Component shown in the video.