【问题标题】:Dojo Tree, how to switch/change icon styleDojo Tree,如何切换/更改图标样式
【发布时间】:2014-07-16 11:23:13
【问题描述】:

我有一个 dijit/Tree 并覆盖 getIconClass 函数来更改图标符号。这很好用,但是我如何通过 onClick 在叶子上更改项目? 通过加载树,所有图标都设置正确。 My Leafs 有一个属性可以是真/假,称为“doTest”。在 getIconClass 函数中,当“doTest”为真时,我将图标样式设置为“foo”,当“doTest”为假时,将图标样式设置为“bar”。通过叶子的 onClick,“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");

【问题讨论】:

    标签: javascript tree dojo


    【解决方案1】:

    我想我们希望看到“setDoTest”功能,尤其是您设置项目值的部分。 我会这样设置值

    myTree.model.store.setValue(item, "doTest", testState);
    

    更新:

    在我们的项目中,我们使用带有 ItemFileWriteStore 的旧 api,因此缺少 setValue。

    另外,这篇文章可能对你有用:(dojo) Observable cannot observe changes in Memory Store。您将在那里读到需要通过 Observable 对象而不是存储本身(内存)来完成更改。

    根据我从文档中获得的信息,您可能应该使用

    observable.put(updatedItem) 
    

    方法以便对项目进行更新,以便可观察者可以通知模型。请注意,“.put”方法有第二个参数携带可选参数。

    我已经设置了js fiddle sample here。该示例演示了更新单击项目属性的方法,以便正确通知模型,从而正确应用 iconClass。示例点击后将大陆的类变为“unknownContinent”。

    希望有帮助

    【讨论】:

      【解决方案2】:

      哦,好吧,

      这里是 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"
                  }
              });
      

      【讨论】:

      • 请在上面使用 jsfiddle 演示查看我的更新答案
      猜你喜欢
      • 2023-03-15
      • 1970-01-01
      • 2012-03-13
      • 1970-01-01
      • 2012-03-29
      • 2015-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多