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.