我正在使用openTemplate函数在#TreeDiv中渲染一个dynatree树视图。在我为dynatree中的某个模板加载所有单元之前,我清空/清除#TreeDiv以删除现有树。这是第一次有效。
当我尝试在#TreeDiv中为其他模板加载其他单位时,我没有看到我的单位数据,div只是空的。不知何故#TreeDiv被破坏了,因为代码像第一次创建单元树一样正常运行。区别在于,我第二次做.empty()时已经有了一棵树。
我错了什么?
function openTemplate(dlg, form) {
$.ajax({
url: $(form).attr('action'),
type: 'POST',
data: form.serialize(),
success: function (response) {
if (response.success) {
dlg.dialog("close");
$('#TreeDiv').empty();
loadUnits(response.data);
}
else {
// Reload the dialog with the form to show model/validation errors
dlg.html(response);
}
}
});
}
function loadUnits(data) {
$('#TreeDiv').dynatree({
onActivate: function (node) {
getTestSteps(node.data.key);
},
onLazyRead: function (node) {
node.appendAjax({
url: '@Url.Action("GetChildrenUnits","Unit")',
data: {"unitId": node.data.key, "templateId": 1 }
});
},
children: data
});
}
答案 0 :(得分:1)
看起来在loadUnits调用之前没有完成对empty()的调用。
您可以将empty()调用包装在untilTimeout中。或者你可以在try或if语句中封装。 IE,如果为空则完成,然后调用loadUnits