【发布时间】:2012-04-24 05:57:07
【问题描述】:
我不知道如何在与click 绑定关联的方法中访问已由checked 绑定更新的值?
似乎checked 绑定在click 绑定之后进行评估,因为在click 绑定方法/处理程序中我无法访问computed 属性值,该值取决于与checked 绑定同步的数组。
单个复选框的模板:
<script id="singleFilterTemplate" type="text/html">
<li>
<input type="checkbox" data-bind="attr: { value: id },
click: $root.testMethod,
checked: $parent.selectedFilterIds">
</li>
</script>
我遵循视图模型的层次结构:
- TopLevelViewModel ($root in template above, defines computed aggregatedSelectedIds property)
---- GroupViewModel_0 ($parent in template above)
-------FilterViewModel_0_0 (Each FilterViewModel is associated with a check box)
-------FilterViewModel_0_N
---- GroupViewModel_N
-------FilterViewModel_N_0
-------FilterViewModel_N_N
-
checked: $parent.selectedFilterIds:每次选中/取消选中复选框时 -TopLevelViewModel.selectedFilterIds数组中的相应项目都会更新 -
click: $root.testMethod:在单击复选框时,我试图获取所有复选框的当前状态,为此我引入了计算属性aggregatedSelectedIds,它运行良好并代表所有GroupViewModel.selectedFilterIds值的聚合状态,基本上它将所有selectedFilterIds属性中的元数据聚合为一个值,在testMethod()中我只是调用alert(topLevelViewModel.aggregatedSelectedIds())以确保此属性表示当前选定过滤器的列表。
所以每次testMethod() 由click 绑定调用 - 我看到过滤器的先前状态(值,由aggregatedSelectedIds 计算)。那么有什么方法可以在click 绑定之前强制/推送/评估checked 绑定?我尝试了event 绑定,但得到了相同的结果。也许我做错了,错过了一些明显的东西?
【问题讨论】:
标签: javascript binding mvvm knockout.js