【问题标题】:Flex Tree Visit Indicators弹性树访问指标
【发布时间】:2009-10-26 04:15:18
【问题描述】:

如何在弹性树组件上显示访问历史记录?我想将点击/访问过的节点突出显示为不同的颜色,之后不会改变,这样所有访问过的节点都将是一种颜色。

我尝试通过

向底层 XML 添加一个属性
var selected:XML=app.treeObj.selectedItem as XML;
if(!selected.hasOwnProperty("visited"))
{
    selected.@visited = "true";

}

并为树提供一个 itemrenderer,如下所示。

public class CustomTreeItemRenderer extends TreeItemRenderer
    {
        public function CustomTreeItemRenderer()
        {
            super();
        }

        override public function set data(value:Object):void
        {
            if(value !=null)
            {

                super.data = value;
                if(value.@visited=="true")
                {
                    setStyle("color", 0x000000);
                }

                invalidateDisplayList()

            }
        }

    }

这段代码确实保留了新颜色,但它也改变了根本没有访问过的节点的颜色。我在这里做错了什么?有没有更好的方法来实现这一点?

维平

【问题讨论】:

  • 澄清一下:您是从树的选择处理程序中调用selected.@visited = "true";,还是在将其分配给树的dataProvider 之前调用?
  • 我在 itemClickHandler 上的 selectedItem 上调用它..

标签: apache-flex actionscript-3 tree e4x


【解决方案1】:

在你设置的数据中,如果没有被访问过,你需要将样式设置回原来的样式,否则当渲染器被回收到一个未访问过的节点时,它会保留访问过的颜色。

试试……

override public function set data(value:Object):void
    {
            if(value !=null)
            {

                    super.data = value;
                    if(value.@visited=="true")
                    {
                            setStyle("color", 0x000000);
                    } 
                    else 
                    {
                            setStyle("color", originalColor);
                    }

                    invalidateDisplayList()

            }
    }

这不是最有效的方法(即使您不需要设置颜色,而且 setStyle 是一项昂贵的操作),但它会起作用。

【讨论】:

  • 谢谢 Gregor..我很接近它..感谢您的及时回复..它现在可以工作了。再次感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-04
  • 1970-01-01
  • 2011-08-21
  • 1970-01-01
  • 2011-12-15
  • 1970-01-01
相关资源
最近更新 更多