【问题标题】:How to pass an Event Listener as a Dynamic Attribute in Marko?如何在 Marko 中将事件侦听器作为动态属性传递?
【发布时间】:2020-01-23 18:19:33
【问题描述】:

我正在尝试在 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>

输出应该是:

&lt;input type='email' id='exampleEmail' on-change('check')&gt;

但我却有:

&lt;input type='email' id='exampleEmail' on-change='check'&gt;

如果我尝试将属性作为字符串而不是对象传递,我会收到迁移和弃用警告:

迁移 “${attributes}”已被弃用。请改用“...属性”修饰符

警告!! “不推荐将字符串作为动态属性 ('&lt;div ${string}&gt;' or '&lt;div ...string&gt;') 传递,请改用对象。”

【问题讨论】:

    标签: event-listener marko dynamic-attributes


    【解决方案1】:

    Marko 目前不支持将事件侦听器传播到标签中。我们正在寻找几种不同的方案来解决这个问题,并且可能会在不久的将来找到解决方案。

    现在,要使父组件能够在其子组件中侦听来自 DOM 节点的事件,您必须从子组件重新发出事件。最简洁的方法是将内置的emit 方法设置为事件的处理程序:

    <button on-click("emit", "my-click")/>
    

    这将重新发出按钮单击作为组件上的“my-click”事件。当然,您可以使用相同的事件名称重新发出它。您需要为希望父母能够收听的每个事件执行此操作。

    【讨论】:

    • 其实我只是想让一些输入有特定的听众,比如:&lt;inputone on-blur('do-this') &lt;input-two('do-that')。并且我能够将这些属性和侦听器传递给它们。
    • 我的解决方法是,在每个输入上都有侦听器并传递参数并检查参数是否适合函数内部。 &lt;for|field| of=fields&gt; &lt;input ...field.attrs on-blur('check', field.parameter)&gt; &lt;/for&gt;
    猜你喜欢
    • 2013-12-13
    • 2015-12-07
    • 1970-01-01
    • 1970-01-01
    • 2010-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多