自定义布尔属性不绑定

custom boolean attributes not binding

自定义布尔属性不像内置的那样绑定。checked.bind='1===2' 不会在标记中包含选中的属性。 myboolatt.bind='1===2' 将在标签中包含 myboolatt。我做了 myboolatt.bind='1===2 | boolconverter' 以注销该值,它显示 false

那我做错了什么?似乎 Aurelia 在绑定表达式上不一致。另一个例子是我可以在重复中执行此 title=${$index<12} 并且我得到了预期的结果。所以我认为这会起作用 - myboolatt.bind=${$index<12}。那甚至无法编译。

相信我,我已经阅读了所有文档(并不意味着我没有遗漏任何内容)和许多帖子,包括 Aurelia 团队之间关于布尔属性的长 运行 讨论。

我在 "" 和 ${} 以及两者中都包含了表达式,但就是无法正常工作。

感觉我好像遗漏了 1 条重要的信息,这些信息可以神奇地解释这些不一致并消除我的挫败感。我非常喜欢 Aurelia 的原因之一(在基于惯例的基础上)是我实际上只是猜测了一些事情 - 认为这就是我会做的 - 如果他们不只是工作的话,叮当。

我真的觉得这应该行得通。所以我再次问 - 我做错了什么?

谢谢

如果您使用 .bind,则将其绑定到 js/ts 文件中的 att 变量,并且不应使用任何美元符号或括号。 例如,myboolatt.bind=${$index<12} 应该是 myboolatt.bind="$index<12"。在索引中使用美元符号与绑定无关。这只是Aurelia提供的一个变量。

当你想使用没有绑定的变量时,你可以使用 ${variable}.

checked 属性不存在,我猜是因为它被评估为 false,并且 checked 属性不是 true/false 属性。选中的输入看起来像 <input type="checkbox" checked/>

这不是 Aurelia 绑定。我最初创建了 bool 属性,但不需要绑定。它们只是空的 类。然后我需要绑定,所以我添加了必要的方法。最终导致混淆的是使用 myboolatt 不向 valueChanged 发送任何参数,其中 myboolatt.bind 发送 T 或 F。不是常规的 js'er 这让我有点震惊,我看到有多种处理方式。无论如何,这里是属性和用法。希望对其他人有帮助。

谢谢

function private_ValueChanged(self, att, value) {
   if (value === false) self.element.removeAttribute(att);
   else self.element.setAttribute(att, '');
}

export class toggleCustomAttribute {
  static inject = [Element];
  constructor(element) { this.element = element; }
  valueChanged(newValue, oldValue) { private_ValueChanged(this, 'toggle', newValue); 
}

export class radioCustomAttribute {
  static inject = [Element];
  constructor(element) { this.element = element; }
  valueChanged(newValue, oldValue) { private_ValueChanged(this, 'radio', newValue); }
}


<ff-button repeat.for="keymen of keyChangeMenu" radio.bind="$index<12" class='ff-button' click.delegate="keyChangeClick($event.target)" id.bind="$index+'_key'" >
  ${keymen[0]}<sup>${keymen[1]}</sup>
</ff-button>