K2 Smartforms выполняет только действие, если вспомогательное представление / форма не открыта

У меня есть K2 SmartForm (v4.7) с представлением списка и таймер, который обновляет данные в этом представлении. Однако, когда подчиненная форма (или подпредставление) открыта поверх базовой формы и отметка времени таймера, индикатор "загрузки" и белый прямоугольник закрывают форму ввода во время обновления списка.

Есть ли способ отображения панели загрузки под подчиненной формой или способ применения правила к событию отметки таймера, чтобы проверить, открыта ли подчиненная форма?

Я понимаю, что можно иметь правило, чтобы остановить таймер, когда открывается подчиненная форма, и запускать его снова, когда она закрывается, но в этом приложении можно отобразить несколько подчиненных форм и представлений, и было бы намного проще просто установить отметку таймера. проверка событий, если что-то открыто.

2 ответа

Хорошо, вот немного магии JavaScript, @nigel-whatling:

Я добавил флажок в форму под названием ckIsSubOpen, Затем в событии тика таймера я передаю некоторый javascript в метку данных (литерал), которая будет вызывать функцию (установленную для события, инициализированного представлением), чтобы установить значение элемента управления. Затем следующее действие в правиле проверяет, установлен ли этот флажок, и если его значение равно false, запустит команду обновления.

Это было сложно, потому что вы не можете просто манипулировать элементами DOM и заставить K2 определить изменение значения. В соответствии с этим потоком есть XML-документ, хранящийся как переменная страницы, а также удобная функция для манипулирования значениями:

function customUpdateSfControl(controlName, value) {
    var myTextBoxXPath = 'Controllers/Controller/Controls/Control[@Name=\"' + controlName + '\"]';
    var windowToUse = window;
    if (!checkExists(windowToUse.viewControllerDefinition)) {
        windowToUse.viewControllerDefinition = $xml(windowToUse.__runtimeControllersDefinition);
    }
    var myControl = windowToUse.$sn(windowToUse.viewControllerDefinition, myTextBoxXPath);
    var controlInfoObj = new windowToUse.PopulateObject(null, value, myControl.getAttribute('ID'));
    windowToUse.executeControlFunction(myControl, 'SetValue', controlInfoObj);
    windowToUse.raiseEvent(myControl.getAttribute('ID'), 'Control', 'OnChange');
}

Скрипт, который устанавливает значение поля, проверяет любые div, которые имеют sub-form или же sub-view учебный класс:

customUpdateSfControl('ckIsSubOpen', ($('div.sub-view, div.sub-form').length > 0));

Кажется, это работает для моих нужд.

Вы можете установить правила для событий subview и subform, таких как Initialize, а также при их закрытии. Вы можете сделать свое отслеживание с этими. Но вам все равно придется делать это для каждого подпредставления / подчиненной формы.

Кроме этого, я думаю, что вам нужно сделать магию JavaScript.

Другие вопросы по тегам