javascript - 绑定(bind)到 Aurelia 中的任意或非标准属性

标签 javascript aurelia

为了使用库,我需要能够绑定(bind)到 UL 元素的“for”属性。

这不起作用:

<ul for="${id}"> ... </ul>

根据测试,我假设这是因为 ul 元素通常没有 for 属性。我该如何解决这个问题?这是 Durandal/淘汰赛中的一个微不足道的事情,我认为是这样的:

data-bind="attr: { for: $data.id }"

我真的必须创建自定义属性吗?这会与用于 label 的内置属性冲突吗?还有其他明显的解决方法吗?

最佳答案

Aurelia 绝对支持绑定(bind)到 DOM 元素上的临时/任意属性。

当你写 <ul for="${id}"> ... </ul> Aurelia 将分配 id 的值属性到 ul 上的临时属性元素。

这相当于做 ul.for = idul['for'] = id .

您缺少的部分是在 DOM 元素上设置任意属性不会自动创建相应的HTML 属性在其他话说,ul.for = id之间是有区别的和 ul.setAttribute('for', id) .这很容易忘记,因为我们通常使用标准的 html 属性,而 DOM 具有特殊的逻辑来将 HTML 属性的值与相应的 DOM 属性进行镜像。对于您可能添加到代码/绑定(bind)中的任意属性,不存在这种特殊逻辑。

您可以强制绑定(bind)使用 setAttribute通过创建绑定(bind)行为而不是标准行为:

https://gist.run/?id=feedfd7659d90c0bdf6d617a244288a6

set-attribute.js

import {DataAttributeObserver} from 'aurelia-binding';

export class SetAttributeBindingBehavior {
  bind(binding, source) {
    binding.targetObserver = new DataAttributeObserver(binding.target, binding.targetProperty);
  }

  unbind(binding, source) {}
}

用法:

<template>
  <require from="./set-attribute"></require>

  <ul for.bind="id & setAttribute"></ul>

  <ul for="${id & setAttribute}"></ul>
</template>

编辑

Aurelia 现在附带一个 attr绑定(bind)行为。使用 <ul for="id & attr"> .这是更新后的示例:https://gist.run/?id=5a12f928d66b6d92c592feb6a62940ad

关于javascript - 绑定(bind)到 Aurelia 中的任意或非标准属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38571557/

相关文章:

javascript - jquery find 找不到 "b"html 元素

javascript - iPhone/iPad 上的自动对焦表单元素

javascript - 如何在不同的 c++ 项目中使用 Google V8 引擎?

javascript - 在 jquery 中定义和调用函数

javascript - 如何创建可配置的 Aurelia 插件?

css - 可以而且应该设计自定义元素的样式

javascript - 从 webpack 传递 less 变量

javascript - 自定义元素双向绑定(bind)更新不触发valueChange

google-chrome-extension - 我可以拥有基于保存构建的 Aurelia 文件版本吗?

gulp watch : no gulpfile found