如何在Polymer.dart中的自定义元素中注册PolymerExpression过滤器?

时间:2013-09-21 18:47:38

标签: dart dart-polymer

如何在自定义元素中注册PolymerExpression过滤器?我正在使用Polymer.dart。

我想用这个:

<div>Uppercase: {{bob.fullName | uppercase}}</div>

在我的自定义元素的模板中。我在哪里注册uppercase

3 个答案:

答案 0 :(得分:3)

我尝试了Seth的答案,表达式本身也在起作用,但不知怎的,我在组件上丢失了事件。 我的on-click事件在我使用时不再起作用了:

  DocumentFragment instanceTemplate(Element template) =>
      template.createInstance(this,
          new PolymerExpressions(globals: {
            'uppercase': (String input) => input.toUpperCase()
  }));

我也尝试了在聚合物表达式页面上提出的解决方案,但绑定委托显然是缺失的。因为可能有新版本?

无论如何,在查看代码之后,我找到了另一种表达方式,并保持事件有效。

class MyElement extends PolymerElement {

  MainElement.created() : super.created();

  @override
  BindingDelegate syntax = new MyPolymerExpressions();
}

class MyPolymerExpressions extends PolymerExpressions {

  MyPolymerExpressions(): super(globals: {
      'uppercase': (String input) => input.toUpperCase()
  });

  @override
  prepareBinding(String path, name, node) => Polymer.prepareBinding(path, name, node, super.prepareBinding);
}

我注意到事件正在运行prepareBinding方法被覆盖。

如果有人有更好的方法或对此有所了解,我很感兴趣!

答案 1 :(得分:2)

PolymerElement内,覆盖instanceTemplate

  DocumentFragment instanceTemplate(Element template) =>
      template.createInstance(this,
          new PolymerExpressions(globals: {
            'uppercase': (String input) => input.toUpperCase()
          }));

请注意,您必须创建PolymerExpressions的实例并注册过滤器。然后你必须拨打template.createInstance

答案 2 :(得分:1)

discussion on the dart-misc开始,聚合物表达式正在寻找接受单个参数的返回。因此,要重现toFixed example of parameters,您需要从过滤器返回一个函数:

class MyElement extends PolymerElement {

  MainElement.created() : super.created();

  String toFixed(int digits) => (num n) => n.toStringAsFixed(digits);
}

此外,从polymer_expressions package开始,您不再需要使用自定义绑定/委托来使用表达式过滤器:“Polymer Expressions现在是自定义元素的默认语法。”看来您只需将函数目录添加到元素中并将其用作过滤器即可。