自定义布尔属性未绑定

时间:2019-09-01 14:04:37

标签: aurelia

自定义布尔属性不会像内置那样绑定。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的原因之一(基于约定的基础上)是,我实际上只是猜测了几件事-认为这就是我的做法-如果他们不能正常工作的话会叮叮当当。< / p>

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

谢谢

2 个答案:

答案 0 :(得分:0)

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

要使用不带绑定的变量时,请使用${variable}

checked属性不存在,我在标签中猜测是因为它的评估结果为false,而checked属性不是true / false属性。选中的输入看起来像<input type="checkbox" checked/>

答案 1 :(得分:0)

这不是Aurelia的约束力。我最初创建bool属性,但不需要绑定。他们只是空课。然后我需要绑定,所以我添加了必要的方法。最终导致使用myboolatt引起混乱的原因是,valueChanged并没有向myboolatt.bind发送T或F的参数。不是普通的js,这让我有点恼火,我发现有多种处理方式。无论如何,这里是属性和用法。希望对别人有帮助。

谢谢

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>