我正在使用EasyUI树,我正在尝试在父节点和子节点上设置图标。
代码如下:
$('#inventorytree').tree ({
url: 'inventory.json',
method: 'get',
animate: true,
lines: true,
formatter: function (node) {
var s = node.text;
var nodeicon = 'icon-blank';
if (node.children){
var onlinecount = 0 ;
var offlinecount = 0 ;
for (var i = 0; i < node.children.length; i++) {
var status = IsOnlineAjaxCall(node.children[i].id);
if (status == 'true') {
onlinecount += 1;
node.children[i].iconCls = 'icon-green-dot';
} else {
offlinecount += 1;
node.children[i].iconCls = 'icon-red-dot';
}
}
var chlidrenlength = node.children.length
if (chlidrenlength > 0) {
if (onlinecount == chlidrenlength) {
node.iconCls = 'icon-green-dot';
} else if (offlinecount == chlidrenlength) {
node.iconCls= 'icon-red-dot';
} else {
node.iconCls= 'icon-orange-dot';
}
}
s += ' <span style=\'color:blue\'>(' + chlidrenlength + ')</span>';
}
return s;
},
});
我实际检查节点(网络设备)是否处于离线状态。
由于我正在ping设备,我使用Ajax调用:
function IsOnlineAjaxCall(deviceid) {
$.ajax({
type: "POST",
url: "Dashboard_v2.aspx/IsOnline",
data: '{id: "' + deviceid + '" }',
contentType: "application/json; charset=utf-8",
dataType: "json",
async: false,
success: function (data) {
//alert(data.d);
var returnstr = data.d.toString;
return returnstr;
//return data.d;
},
//success: function (data) {
// return data;
//},
failure: function (response) {
//alert(response.d);
}
});
以下是我的问题;是的,我有几个:
1)我无法让树开始崩溃。
如果我将状态设置为关闭,我得到的最好的确是一个关闭状态但是空节点有一个加号,当点击它时,它会列出所有父节点。 调用函数到CollapseAll永远不会在按钮外调用。
2)从ajax函数中获取未定义的值
当从ajax函数运行警报时,我得到预期的结果:true或false。 一旦将值发送回树定义中的调用函数,我就会得到未定义。 做了相当多的研究,无法弄清楚如何解决它。
3)父节点上的iconCls
在子节点上设置iconCls属性(在此阶段手动)确实可以正常工作。 不考虑在父节点上设置iconCls。调用属性值,我得到我刚刚设置的值,但树不显示新图标,就像它对子项一样
非常感谢任何帮助
关于问题#2的更新 我正在使用div来“存储”ajax的结果,然后读取值:
$.ajax({
type: "POST",
url: "Dashboard_v2.aspx/IsOnline",
data: '{id: "' + deviceid + '" }',
contentType: "application/json; charset=utf-8",
dataType: "json",
async: false,
success: function (data) {
document.getElementById("HidIpStatus").innerHTML = data.d;
},
failure: function (response) {
}
});
这种解决方法是有效的,但必须有更好的东西,不是吗?
答案 0 :(得分:0)
当你编写一个依赖于ajax调用的返回值的函数时,除非你使用promises,否则它将失败。当你调用IsOnlineAjaxCall()时,这里发生了什么--javascript不知道它需要等待来自ajax调用的响应并继续运行,所以status == undefined。如果您阅读此处的文档,您将看到一些如何使用JQuery deferred.promise()修复它的示例。很难说,但我认为至少如果你超越这一点,其余部分可能会开始落实到位。