我正在尝试在不使用额外自定义函数的情况下完成以下操作:
以下是我的代码的简化示例:
<div repeat.for="item of itemSearch.rates">
<input type="checkbox" ref="item.$index" model.bind="item" checked.bind="selectedRates">
<input type="text" disabled.bind="item.$index.checked == false" value.bind="item.total_value">
</div>
目前,有了上述内容,只有checked.bind
正在运作。所选项目存储在我的新selectedRates
数组中。
但是我的disabled.bind
根本没有被触发
如果我从复选框中删除checked.bind
,disabled.bind
效果很好。
此外,更新后的值似乎会在提交后显示为selectedRates
,但元素会失去焦点。
我知道阵列观察没有得到官方支持as mentioned here,我注意到值得一提。
问题
checked.bind
与ref
&amp; disabled.bind
?
更新
我在登录selectedRates
时发现“可观察值”问题在萤火虫中间歇出现。
在html中显示时,值更改始终会更新,@ Fabio同时使用BindingEngine
实现以及checked.bind
。 Chrome始终显示并记录正确的值
仍然不知道为什么,或者我是否应该关注这一点。
答案 0 :(得分:1)
这是我能找到的最简单的解决方案。可能有更简单的方法。
<强> HTML 强>
<template>
<div repeat.for="item of rates">
<input type="checkbox" ref="item.check" model.bind="item" change.delegate="updateSelectedRates(item)">
<input type="text" disabled.bind="item.check.checked" value.bind="item.value">
</div>
<br>
<template repeat.for="rate of selectedRates">${rate.value}</template>
</template>
<强> JS 强>
export class App {
rates = [ { value: 1 }, {value: 2} ];
selectedRates = [];
updateSelectedRates(rate) {
if (rate.check.checked) {
this.selectedRates.push(rate);
} else {
let index = this.selectedRates.map(rate => rate.value).indexOf(rate.value);
if (index !== -1) {
this.selectedRates.splice(index, 1);
}
}
}
}
答案 1 :(得分:1)
参见文档
http://aurelia.io/hub.html#/doc/article/aurelia/binding/latest/binding-checkboxes/1
<input type="checkbox" model.bind="product.id" checked.bind="selectedProductIds">