【问题标题】:Flex: Additional label in ButtonBarButtonFlex:ButtonBarButton 中的附加标签
【发布时间】:2011-12-05 19:10:48
【问题描述】:

我正在尝试扩展 ButtonBarButton 以包含一个附加标签,该标签显示视图堆栈中各个框的更新次数(这是标签栏的 dataProvider)。

我可以获得附加标签(名为 indicatorLabel)以从数据中读取初始值,但我无法像实际的“标签”属性那样自动更新它。我的理解是您可以绑定到数据对象,但事实并非如此。

在视图堆栈中使用的框有一个名为 _indicator 的属性


[Bindable]
public var _indicator:String;

我知道它正在正确更新,因为我可以在框中看到它正在更新(它也绑定了一个标签)。它似乎只是不更新​​按钮栏按钮。

我的 buttonbarbutton 类具有以下内容(在 creationComplete 中调用了 init()


[SkinPart]
public var indicatorLabel:spark.components.Label;

private function init():void
{
 indicatorLabel = data._indicator;
 addEventListener("dataChange", onDataChangeHandler);
}

private function onDataChangeHandler(e:Event):void
{
 trace(e.target.label + ' ' + e.target._indicator);
}

我猜我对数据绑定或传递给按钮的数据 obj 的假设是不正确的。任何帮助表示赞赏。

【问题讨论】:

  • 看看我几天前回答的这个问题 (stackoverflow.com/questions/8353777/…)。它有点抽象,但它也应该回答你的问题。
  • RIAstar,太酷了。我对 commitProperties 了解不多。性能提升有多大?我确实发现了我的问题,e.target._indicator 应该是 e.target.data._indicator。
  • 另外,如果您写了一个答案,我会将其标记为已回答 :-) 以便未来的读者可以直接看到答案。

标签: apache-flex data-binding button


【解决方案1】:

几天前我在这里回答了一个与此密切相关的问题。它有点抽象,但它也应该回答你的问题。看看Flex : Communicate between the skin and the data model?

至于您关于性能改进的其他问题:您只需要记住,每当您使用绑定时,编译器都会生成一些事件侦听器来侦听数据的变化。当然,这对于一次性组件甚至一堆实例都不是问题,但是如果您有一个包含数千个组件且都使用绑定的 List,它可能会成为一个问题。首先,当不再需要这些组件时,垃圾收集器不会那么容易地清理它们,其次 - 根据您的实现 - 可能会同时触发数千个事件。

底线:您可以考虑commitProperties() 方法性能调整,因此在实际遇到性能问题之前不要考虑它。

另一方面从架构的角度来看:这种方法允许组件和它的皮肤更清晰地分离。使用hostComponent / binding 方法,你可以说皮肤知道的太多了:它必须知道它的宿主组件和它的属性。而另一个让你拥有一个完全“愚蠢”的皮肤。因此,我再次倾向于将绑定与一次性组件和 commitProperties() 与高度可重用的组件一起使用。

最终,这一切都是一种权衡(因为“干净”的方式更复杂,工作量也更大),您可以根据具体情况做出权衡决定。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-12
    • 2021-10-24
    • 2020-04-26
    • 2021-10-03
    • 2013-02-10
    • 1970-01-01
    • 1970-01-01
    • 2012-04-11
    相关资源
    最近更新 更多