Javascript 绑定到Aurelia中的任意或非标准属性
为了使用库,我需要能够绑定到UL元素的“for”属性 这不起作用:Javascript 绑定到Aurelia中的任意或非标准属性,javascript,aurelia,Javascript,Aurelia,为了使用库,我需要能够绑定到UL元素的“for”属性 这不起作用: <ul for="${id}"> ... </ul> 基于测试,我假设这是因为ul元素通常没有for属性。我如何解决这个问题?这是Durandal/knockout中的一个小问题,我认为是这样的: data bind=“attr:{for:$data.id}” 我真的必须创建自定义属性吗?这是否会与用于标签的内置属性冲突?还有其他明显的解决方法吗?我最终为此创建了一个属性 export class
<ul for="${id}"> ... </ul>
基于测试,我假设这是因为ul
元素通常没有for
属性。我如何解决这个问题?这是Durandal/knockout中的一个小问题,我认为是这样的:
data bind=“attr:{for:$data.id}”
我真的必须创建自定义属性吗?这是否会与用于
标签的内置属性冲突?还有其他明显的解决方法吗?我最终为此创建了一个属性
export class MdlForCustomAttribute {
static inject = [Element];
element : HTMLElement;
constructor(element) {
this.element = element;
}
valueChanged(newValue, oldValue) {
this.element.setAttribute('for', newValue);
}
}
用法:
…
这种情况可能在未来的版本中得到支持:我最终为此创建了一个属性
export class MdlForCustomAttribute {
static inject = [Element];
element : HTMLElement;
constructor(element) {
this.element = element;
}
valueChanged(newValue, oldValue) {
this.element.setAttribute('for', newValue);
}
}
用法:
…
这种情况在未来的版本中可能会得到支持:Aurelia绝对支持绑定到DOM元素上的特殊/任意属性
当您编写
Aurelia将把id
属性的值分配给ul
元素上的特殊属性
这相当于执行ul.for=id
或ul['for']=id
缺少的部分是在DOM元素上设置任意的属性,而不是自动创建相应的HTML属性。换句话说,ul.for=id
和ul.setAttribute('for',id)
之间存在差异。这很容易忘记,因为我们通常使用标准的html属性,并且DOM具有特殊的逻辑来使用相应的DOM属性镜像html属性的值。对于可能添加到代码/绑定中的任意属性,此特殊逻辑不存在
通过创建绑定行为,可以强制绑定使用setAttribute
而不是标准行为:
set-attribute.js
从'aurelia binding'导入{DataAttributeObserver};
导出类SetAttributeBindingBehavior{
绑定(绑定,源){
binding.targetObserver=新数据属性observer(binding.target,binding.targetProperty);
}
解除绑定(绑定,源){}
}
用法:
编辑
Aurelia现在附带了一个attr
绑定行为。使用
。下面是更新的示例:Aurelia绝对支持绑定到DOM元素上的特殊/任意属性
当您编写
Aurelia将把id
属性的值分配给ul
元素上的特殊属性
这相当于执行ul.for=id
或ul['for']=id
缺少的部分是在DOM元素上设置任意的属性,而不是自动创建相应的HTML属性。换句话说,ul.for=id
和ul.setAttribute('for',id)
之间存在差异。这很容易忘记,因为我们通常使用标准的html属性,并且DOM具有特殊的逻辑来使用相应的DOM属性镜像html属性的值。对于可能添加到代码/绑定中的任意属性,此特殊逻辑不存在
通过创建绑定行为,可以强制绑定使用setAttribute
而不是标准行为:
set-attribute.js
从'aurelia binding'导入{DataAttributeObserver};
导出类SetAttributeBindingBehavior{
绑定(绑定,源){
binding.targetObserver=新数据属性observer(binding.target,binding.targetProperty);
}
解除绑定(绑定,源){}
}
用法:
编辑
Aurelia现在附带了一个attr
绑定行为。使用
。下面是一个更新的示例:否-这是库的一个要求,因此它必须是“for”,这很有帮助,但我并不真正相信这种推理。有很多有效的aurelia属性不是UL元素的“标准”。我认为应该包括一种绑定到任意属性的简单方法,就像durandal/knockout中包含的一样。我认为这是可以支持的。在模板绑定回购中打开一张票据,应该有人会给你回复关于PR的建议。不,这是图书馆的要求,所以它必须是“for”,这很有帮助,但我真的不相信这个理由。有很多有效的aurelia属性不是UL元素的“标准”。我认为应该包括一种绑定到任意属性的简单方法,就像durandal/knockout中包含的一样。我认为这是可以支持的。在模板绑定回购中打开一张票据,应该有人会给你回复PR建议。这看起来比我在下面发布的解决方案更好,因为它也可以用于其他属性,但是我仍然认为这非常不令人满意。当我执行id.bind=“id”
时,它设置id属性。当我执行datafoo.bind=“id”
时,它设置datafoo属性。这里的默认行为是在DOM元素上设置一个甚至不存在的属性,这是令人惊讶和不直观的。此外,DataAttributeObserver不在文档中,甚至不在aurelia-binding.d.ts文件中。我仍然相信aurelia需要一个更好的开箱即用的解决方案。id
是一个内置的解决方案。是否使用setAttribute(id,…)
或<