我在stackPanel中的scrollPanel中有一棵树该树包含300多个treeitems,每个都有一个复选框。 根据userproperty的状态,我想传播单击其子树项目的复选框的状态。 我有一个方法来查找每个(子)树项目的每个复选框的ID。该方法也用于构建树。
每个复选框都有(相同)onValueChangeHandler
function onChangeStatusChkTreeItem(e)
{ // Set all checkboxes of subtreeitems TRUE or FALSE in case 'propagate' will be true
var app = UiApp.createApplication();
var chkSource = e.parameter.source;
var triSource = chkSource.replace(chkPrefix, triPrefix); // chkPrefix and triPrefix are global variables
var status = (e.parameter.button == 1); // New status of the checkbox
var propagate = userProperties.getProperty('propagateToSubFofolders');
propagate = ((propagate == true) || (propagate == 'true'));
if (propagate == false)
{ // Just this checkbox
userProperties.setProperty(triSource, status);
app.getElementById(chkSource).setValue(status, true); // (`false` makes no difference)
}
else
{ // Include subtree as well
var props = userProperties.getProperties();
var propsChanged = {};
var changes = 0;
updateSubTree_(triSource, chkSource);
if (changes > 0) userProperties.setProperties(propsChanged);
}
function updateTree_(treeItemId, chkTreeItemId)
{ // Internal function : Set all subtreeitems as well
if (props[treeItemId] != status)
{ // Update needed
changes++;
propsChanged[treeItemId] = status;
var chk = app.getElementById(chkTreeItemId);
chk.setValue(status, false); .. chk.setValue(status, true) maakt geen verschil
// loop through the children of treeItemId (pseudo code --> tested)
for each child
{
newTriId --> created
newChkId --> created based on newTriId
updateTree_(newTriId, newChkId);
}
}
}
}
但树中的复选框不会更新。
所以我的问题是:我错过了什么?
答案 0 :(得分:0)
除非我遗漏了一些东西,否则我很确定使用UiApp创建的应用程序在您调用return app;
之前不知道自己的状态。
在发生这种情况之前,您的代码所做的任何更改都不会得到反映,请将其包含在onValueChangeHandler()的末尾