我有一个dijit / Tree并覆盖getIconClass函数来更改图标符号。这工作正常,但我如何通过叶子上的onClick更改项目? 通过加载树,所有图标都设置正确。我的叶子有一个属性可以是真/假,叫做#34; doTest"。在getIconClass函数中,我将图标样式设置为" foo"当" doTest"是真实的,并且" bar"当" doTest"是假的。通过点击叶子" doTest"属性切换为true / false但图标仍然相同。有没有办法通过点击我的叶子来改变图标?
var myTree = new Tree({
// Setze wurzel
data : myModel,
getIconClass : function(item) {
if (item.type == "Root") {
return "allServer";
}
if (item.type == "Server") {
return (item.available ? "serverAktive"
: "serverInAktive");
}
if (item.type == "Service") {
return (item.doTest ? "doPerformanceTest"
: "doNoPerformanceTest");
}
},
onClick : function(item) {
// Function set the Value of doTest to false or true.
setDoTest(item);
// Here must be a way to Change the icon!!!!
},
onDblClick : function(item) {
if (item.type == "Server") {
// doPerformanceTest für alle true/false
var services = myObsStore.getChildren(item);
var setTo = true;
services.forEach(function(element, index) {
if (index == 0) {
if (element.doTest) {
setTo = false;
}
}
// Change the Icon of all!!!!
});
}
},
model : myModel
}).placeAt("navigationView");
答案 0 :(得分:0)
我想我们希望看到“setDoTest”功能,尤其是设置项目值的部分。 我将这个值设置为
myTree.model.store.setValue(item, "doTest", testState);
更新
在我们的项目中,我们使用旧的api和ItemFileWriteStore,因此缺少setValue。
此外,此阅读可能对您有用:(dojo) Observable cannot observe changes in Memory Store。您将在那里读到需要通过Observable对象而不是存储本身(Memory)完成更改。
从文档中我可以得到的,你应该使用
observable.put(updatedItem)
方法为了对项进行更新,以便observable可以通知模型。请注意,“。output”方法有第二个参数,带有可选参数。
我已设置js fiddle sample here。该示例演示了更新所单击项的属性的方法,以便对模型进行预先通知,因此正确应用了iconClass。点击后,样本将非洲大陆的班级变为“unknownContinent”。
希望有所帮助
答案 1 :(得分:0)
哦,好的,
这是doTest函数:
function setDoTest(item) {
if (item.type == "Service") {
if (item.doTest == true) {
item.doTest = false;
} else {
item.doTest = true;
}
alert("service doTest:" + item.doTest);
// change the Icon???
}
}
这是我的商店
// Store für den Tree
var myStore = new Memory({
// Setze die Wurzel
data : [ serverRoot ],
getChildren : function(object) {
return this.query({
parent : object.id
});
}
});
// Wrapp den store in Observable für updates
var myObsStore = new Observable(myStore);
// Initialisiere Model und setze Store
var myModel = new ObjectStoreModel({
store : myObsStore,
// Wurzel setzen
query : {
id : "root"
}
});