我正在Aurelia创建一组单选按钮,代码如下:
<div repeat.for="option of options">
<input type="radio" id="${option}_id" name="radio_options" model.bind="option" checked.bind="optionValue"/>
<label for="${option}_id" id="${option}_label">${option}</label>
</div>
然而,这样做我发现model.bind不起作用 - 当选中单选按钮时,不会填充相应类中的optionValue。类似地,当在类中为optionValue分配一些值时,不会检查相应的单选按钮。我发现这只发生在转发器上。在我的情况下,选项是数字。你能帮我找一下这里可能有什么问题吗?
答案 0 :(得分:3)
第一个问题是在处理对象时应该使用model.bind
。由于您使用的是原始类型,因此应使用value.bind
代替。
第二个问题是输入值总是字符串,因此在设置初始值时,它必须是字符串。例如:
HTML:
<template>
<div repeat.for="option of options">
<input type="radio" id="${option}_id" name="radio_options" value.bind="option" checked.bind="optionValue"/>
<label for="${option}_id" id="${option}_label">${option}</label>
</div>
<p>Selected Option: ${optionValue} </p>
</template>
JS:
export class App {
options = [ 1, 2, 3, 4 ]
optionValue = '3';
}
如果您确实希望在视图模型中使用int,则可以创建ValueConverter,以便在将值传递给视图或从视图传递时将值转换为int。例如:
export class AsIntValueConverter {
fromView(value) {
return Number.parseInt(value);
}
toView(value) {
return value.toString();
}
}
用法:
<input type="radio" id="${option}_id" name="radio_options" value.bind="option" checked.bind="optionValue | asInt"/>