【问题标题】:How do I set a property in a polymer-dart behavior mixin?如何在聚合物飞镖行为混合中设置属性?
【发布时间】:2016-06-08 18:57:12
【问题描述】:

以下示例取自聚合物飞镖documentation on behaviors。它利用了toggleHighlight 中的set 方法。我不明白这是怎么可能的,因为set 没有在任何地方定义。

@behavior
abstract class HighlightBehavior {
  @Property(notify: true, observer: 'highlightChanged')
  bool isHighlighted = false;

  static created(instance) {
    print('Highlighting for $instance enabled!');
  }

  @Listen('click')
  toggleHighlight(_, __) {
    set('isHighlighted', !isHighlighted);
  },

  @reflectable
  highlightChanged(bool newValue, _) {
    toggleClass('highlighted', newValue);
  }
}

如何在触发所有使数据绑定工作的功能的行为中设置聚合物属性?

一个行为是否应该实现PolymerBase 才能使用set 方法?快速测试表明,当行为实现 PolymerBase 时,set 有效。但这不是它的记录方式。我可以通过实现PolymerBase 来引发一些不需要的副作用吗?

【问题讨论】:

    标签: dart-polymer


    【解决方案1】:

    HighlightBehavior 是抽象的,所以通过继承获得真实的实例。来自文档

    class MyElement extends PolymerElement with HighlightBehavior {
      MyElement.created() : super.created();
    }
    

    PolymerElement 扩展了 PolymerBase,它提供了 set 方法。

    【讨论】:

    • 谢谢,现在我明白了。来自 Java 需要一些时间来适应此功能。
    • 太棒了:-) 行为很复杂,行为的文档很少,所以不明显。在摆弄了一些代码之后,事情对我来说变得更加清楚了。其实我到目前为止不需要编写自己的行为,启动一次,但所需的功能已经在 polymer_elements 库中。
    • 我正在为一个业务应用程序构建一个框架,我想在其中使用元素的行为来公开一个通用 API。请参阅以下示例,其中view-companiesview-users 混合在ViewBehavior 中,允许shell 元素处理其子元素。 <shell> <view-users default-view></view-users> <view-companies></view-companies> </shell> 我认为这种对通用功能进行分组的用例符合行为的理念。
    • 为我的项目写了一个行为,它工作正常。现在我发现很难跟踪 set 方法,dart 分析器也将其标记为警告。只要 Behaviors 与 PolymerElements 混合,它就可以工作。
    • 没错,分析器也标记了它,因为真的很难知道(对于机器和我一开始 gg)这种行为(普通飞镖混合)只会在具有这种方法的类中使用。
    猜你喜欢
    • 2013-08-24
    • 1970-01-01
    • 1970-01-01
    • 2014-07-28
    • 2014-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-15
    相关资源
    最近更新 更多