如何在自定义元素中注册 PolymerExpression 过滤器?我正在使用 Polymer.dart。
我想用这个:
<div>Uppercase: {{bob.fullName | uppercase}}</div>
在我的自定义元素的模板中。我在哪里注册uppercase
?
如何在自定义元素中注册 PolymerExpression 过滤器?我正在使用 Polymer.dart。
我想用这个:
<div>Uppercase: {{bob.fullName | uppercase}}</div>
在我的自定义元素的模板中。我在哪里注册uppercase
?
我尝试了 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
方法被覆盖。
如果有人有更好的方法或对此有一些想法,我很感兴趣!
在里面PolymerElement
,覆盖instanceTemplate
:
DocumentFragment instanceTemplate(Element template) =>
template.createInstance(this,
new PolymerExpressions(globals: {
'uppercase': (String input) => input.toUpperCase()
}));
请注意,您必须创建一个实例PolymerExpressions
并注册过滤器。然后你必须打电话template.createInstance
从对 dart-misc 的讨论中,聚合物表达式正在寻找一个接受单个参数的返回值。因此,要重现toFixed
参数示例,您需要从过滤器返回一个函数:
class MyElement extends PolymerElement {
MainElement.created() : super.created();
String toFixed(int digits) => (num n) => n.toStringAsFixed(digits);
}
此外,从polymer_expressions
包中,您不再需要执行自定义绑定/委托来使用表达式过滤器:“Polymer Expressions 现在是自定义元素的默认语法。” 看来您可以将函数目录添加到元素并将其用作过滤器。