Dart Polymer 1.0行为 - 未找到方法&需要吸气剂

时间:2016-02-18 06:38:22

标签: dart polymer polymer-1.0 dart-polymer

我想在Dart中编写一个简单的行为以供自定义元素使用。

@behavior
abstract class AlignmentBehavior implements PolymerBase {

  @Property()
  bool alignTop = false;
  // more properties ...

  ready() {
    updateAlignment();
  }

  @reflectable
  updateAlignment([_,__]) {
    // reference to the element the Behavior is attached to. 
    // 1) Is that the correct way?
    var ele = Polymer.dom(root);

    // We need to inherit from PolymerBase to access set(...)
    // 2) Is that the correct way?
    set('alignTop', aTop);
    // .. to more stuff
  }

}

我的前两个问题已经写在代码中了。如何访问行为附加到的元素?这样做的正确方法是什么?我目前使用Polymer.dom(root),但我不知道这是否有效,因为我有一些运行时错误,我将在本文后面解释。访问底层元素的官方方式是什么?它使用的是JsObject吗?它是从父PolymerElement调用Behavior函数并传递this,还是根本不访问它?

另一个问题是我是否必须继承PolymerBase。 Github wiki上的Behavior示例没有这样做,但是为了访问诸如set之类的方法来修改@Property,我必须继承它。这样做的正确方法是什么?

我的最后两个问题是关于我得到的错误。一个错误要求我为我的属性实现getter和setter,例如为alignTop添加getter和setter。 最后但并非最不重要的是,我无法从我的自定义元素中调用updateAlignment()。它说Class 'MainApp' has no instance method 'updateAlignment'.

1 个答案:

答案 0 :(得分:2)

1)

  

var ele = Polymer.dom(root);

如果你想访问元素的DOM,那很好 只需root即可获得相同的AFAIK。

如果要访问元素类实例,则无需执行任何操作。这是this,但无论如何这都隐含在Dart中。 您只能访问mixin中已知的内容。制造"事物" mixin知道你可以创建一个接口类。

abstract class MyComponentInterface {
  void someFunction();
  int someField;
  String get someValue;
  set someValue(String value);
  ...
}

然后在mixin和element类中实现接口,并且您有一个共享契约。

abstract class AlignmentBehavior implements MyComponentInterface, PolymerBase {

mixin现在可以访问成员了,因为implements MyComponentInterface`声称它们将存在并且

class MyComponent extends PolymerElement with AlignmentBehavior {

会强制您实施它以履行mixin的合同。

2)看起来很好

3)

  

另一个问题是我是否必须继承PolymerBase

与1基本相同.Dart中的任何Polymer元素都必须扩展PolymerBase。为了能够从mixin中访问PolymerBase的成员,它还必须实现它。这不会导致任何限制,因为mixin将应用于的类将无论如何都将履行该合同。

如果您不需要访问PolymerBase提供的任何成员,则无需实施。