Aurelia 自定义元素中触发的自定义渲染器和验证问题
我在用奥雷莉亚-validation@1.0.0-beta.1.0.1 我的设想是:Aurelia 自定义元素中触发的自定义渲染器和验证问题,aurelia,Aurelia,我在用奥雷莉亚-validation@1.0.0-beta.1.0.1 我的设想是: 我有一个表单,它有一个验证控制器和验证规则 表单中有一个无容器的自定义元素,它包装密码输入,并将当前密码作为可绑定属性公开 验证绑定行为用于表单与此自定义元素属性的绑定 custom元素还引发blur事件,以便在包装的密码输入失去焦点时触发验证绑定 验证生命周期正在按预期工作 我遇到的问题是我正在使用的自定义渲染器,它当前假定它接收的元素是实际的DOM输入元素,这样就可以将类应用于输入,并且可以在其旁边注入
- 我有一个表单,它有一个验证控制器和验证规则
- 表单中有一个无容器的自定义元素,它包装密码输入,并将当前密码作为可绑定属性公开
- 验证绑定行为用于表单与此自定义元素属性的绑定
- custom元素还引发blur事件,以便在包装的密码输入失去焦点时触发验证绑定
<template>
<div class="input-group -password">
<div class="input-toggle-wrapper">
<label for="password" class="-hidden" t="fields_Password"></label>
<input
id="password"
type="${isPasswordVisible ? 'text' : 'password'}"
value.bind="password"
t="[placeholder]fields_Password"
maxlength="20"
focus.trigger="onInputFocus()"
blur.trigger="onInputBlur()" />
<div
class="toggle ${isPasswordVisible ? '-show' : ''}"
click.delegate="onToggleClick($event)"
mousedown.delegate="onToggleMouseDown($event)"></div>
</div>
</div>
</template>
我将其设置为无容器,因为我不想将
作为外部元素发送到DOM中,因为这打破了当前布局的CSS规则(我不想更改CSS)
但是,如果自定义元素是无容器的,那么我不知道如何使用来自表示DOM中自定义元素的注释节点的DOM导航来访问模板中的第一个div。不幸的是,Aurelia团队已经发现了这个问题,并且(至少到目前为止)说他们不会解决它 针对该问题,有一个黑客解决方法,如下所示:
if(element.nodeType === 8) {
element = this.getPreviusElementSibling(element)
}
如果在渲染器的渲染方法中添加该选项,它应该可以工作。同样,hacky,但是它完成了工作,而不是来自AU团队的正式修复。您能分享您的自定义元素代码吗?
@containerless
的具体原因是什么?也许您必须检查元素是真正的HTMLInputElement还是注释,然后选择正确的策略我添加了模板代码。我们最终创建了一个解决方案,允许自定义元素通过实现自定义接口在父上下文中与验证交互-当验证呈现器检查元素是否附加消息时,它可以查看元素是否为自定义元素,并通过与自定义元素交互作为接口(称为IHasCustomValidation)将验证指令传递给它,因此自定义元素可以返回内部元素,这在实践中非常有效。