如何在自定义元素中注册PolymerExpression过滤器?我正在使用Polymer.dart。
我想用这个:
<div>Uppercase: {{bob.fullName | uppercase}}</div>
在我的自定义元素的模板中。我在哪里注册uppercase
?
答案 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现在是自定义元素的默认语法。”看来您只需将函数目录添加到元素中并将其用作过滤器即可。