Dojo Tree,如何切换/更改图标样式

时间:2014-07-14 08:52:47

标签: javascript tree dojo

我有一个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");

2 个答案:

答案 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"
            }
        });