我在Knockout中遇到了父/子情况。我有一个根据数据列表(发票和详细信息)创建的表。我需要在选中表中的某些复选框时执行特定操作。
目前,我有很多工作时,复选框被选中。但只有少数目标之一是工作时,复选框被取消。我还没有能够弄清楚如何让它工作。
下面是我的jsfiddle的截图。
(来源:kingwilder.com)
目的
当一个或两个“使用点数”复选框都选中时:
- 在当前上下文中禁用发票和明细项目的“已核销”输入-当前正在工作
- 将任何和所有复选框中的到期金额(贷方金额)合计作为正值输入到顶部的金额输入中-currently working
- 禁用无线电(支票、信用卡、其他)-当前正在工作
当一个或两个“使用信用”复选框未选中时:
- 在当前上下文中为发票和明细项目启用“已核销”输入-不起作用
- 仅从顶部金额输入-当前正在处理中删除当前上下文的选定到期金额
- 启用无线电-不工作
这是我的工作jsFiddle:jsFiddle
这是当前在选中复选框时对UI进行更新的代码:
self.SelectedItems.subscribe(function(datalist){
//console.log(ko.toJSON(item));
var totalAmountSelected = 0;
console.log("selected list: " + self.SelectedItems().length + " - datalist: " + datalist.length);
ko.utils.arrayForEach(datalist, function(node){
totalAmountSelected += parseFloat(node.amountdue() * -1);
node.Disable(true);
node.Parent.Disable(true);
self.Disable(true);
});
self.Amount(totalAmountSelected);
});
这里要显示的代码太多,请查看小提琴。
1条答案
按热度按时间xtupzzrd1#
我提出了一种方法,它使用一个绑定到复选框的布尔可观察对象,并结合一个
ko.computed
来收集所有选中的细节。目前,您正在尝试将选中的“使用信用点数”框的每个值添加到数组中。
在这种方法中,每个细节都有一个
useCredit
可观测值,它可以是true
或false
。在父视图模型中,有一个计算数组计算是否至少有一个细节具有useCredit() === true
。实施:
在
Detail
中:使用点数复选框的绑定方式如下:
另一个输入中的
disable
数据绑定可以直接绑定到求反的useCredit
值:data-bind="disable: !useCredit()"
现在,开始计算
payment
视图模型的计算链。在Invoice
中,根据所有细节计算useCredit
属性:payment
中可以使用几乎相同的代码:现在,您可以将单选按钮的disable属性绑定到
useCredit
,也可以将其重命名为Disable
。以下是在小提琴中实施的这些更改:https://jsfiddle.net/qLrgb9bs/
另外,如果我是你,我会删除change事件数据绑定,并使用subscriptions/computed。