Javascript 绑定到Aurelia中的任意或非标准属性

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”属性

这不起作用:

<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,…)
            或<