我有一个带有列表视图的K2 SmartForm(v4.7),以及一个刷新该视图中数据的计时器。但是,当子窗体(或子视图)在基本窗体顶部打开并且计时器打勾时," loading"在刷新列表时,指示符和白框会覆盖报名表。
是否可以在子窗体下显示加载面板,或者将规则应用于计时器的tick事件以检查子窗体是否打开?
我意识到在子窗体打开时可以让规则停止计时器,并在关闭时再次启动它,但是有多个子窗体和视图可以在这个应用程序中显示,它会很多更容易简单地让计时器滴答事件检查是否有任何东西打开。
答案 0 :(得分:1)
好的,所以这里有一些JavaScript魔法,@ nigel-whatling:
我已在名为ckIsSubOpen
的表单中添加了一个复选框控件。然后在计时器的滴答事件中,我将一些javascript传递给数据标签(文字),它将调用一个函数(在视图初始化事件上设置)来设置控制值。然后,规则中的下一个操作将检查是否选中了该复选框,如果其值为false,则将运行refresh命令。
这很棘手,因为你不能简单地操纵DOM元素并让K2获得价值变化。根据{{3}},存储为页面变量的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');
}
设置字段值的脚本会检查具有sub-form
或sub-view
类的任何div:
customUpdateSfControl('ckIsSubOpen', ($('div.sub-view, div.sub-form').length > 0));
这似乎符合我的需要。
答案 1 :(得分:0)
您可以在子视图和子表单事件(如Initialize)以及关闭时设置规则。你可以用那些跟踪。但是你仍然需要为每个子视图/子表单执行此操作。
除此之外,我认为你必须做一些JavaScript魔术。