我正在尝试在Marko中创建一个表单,对于输入,我正在使用一个将创建输入并处理验证的组件。 漏洞是当我尝试将事件侦听器作为动态属性传递时。
我有一个作为对象的字段数组,其中包含类型,id和(如果必须检查该字段)带有处理程序功能的属性对象。
$ const fields= [
{
type: 'email',
id: 'exampleEmail',
atrrs: {
'on-change' : 'check'
}
'},
.
.
.
]
<for|field| of=fields>
<input type=`${field.type}` id=`${field.id}` ...field.attrs>
</for>
输出应为:
<input type='email' id='exampleEmail' on-change('check')>
但是我却拥有:
<input type='email' id='exampleEmail' on-change='check'>
如果我尝试将属性作为字符串而不是对象传递,则会收到迁移和弃用警告:
迁移 “ $ {attributes}”已弃用。请改用“ ...属性”修饰符
警告!!
“不建议将字符串作为动态属性('<div ${string}>' or '<div ...string>'
传递,而应使用对象。”
答案 0 :(得分:0)
Marko当前不支持将事件侦听器扩展到标签中。我们正在寻找几种不同的方法来解决此问题,并且可能会在不久的将来找到解决方案。
现在,要使父级能够侦听其子级中DOM节点的事件,必须从子级组件中重新发送事件。最简洁的方法是将内置的emit方法设置为事件的处理程序:
<button on-click("emit", "my-click")/>
这会将按钮单击重新发送为组件上的“我的点击”事件。当然,您可以使用相同的事件名称重新发送它。您需要对希望父母能够收听的每个事件执行此操作。