【发布时间】:2015-04-30 09:48:50
【问题描述】:
我是 Knockout 的新手,我有一个小问题阻止我完成我的简单项目。
我有一个名为 loanDeductions 的 observableArray,我显示在一个带有 foreach 绑定的表中。
I have another observableArray called loanDeductionsList which is also from the json data of my first observableArray, I used it in my drop down list which when a value is selected, it will push the selected data to我的桌子。如果它没有意义,因为我无法真正清楚地解释它,这是我的 javascript 文件:
var deductionLine = function (deductionID, deductionName, amount) {
self = this;
self.deductionID = ko.observable(deductionID);
self.deductionName = ko.observable(deductionName);
self.amount = ko.observable(formatCurrency(amount));
};
function LoanDeductions(deductions) {
var self = this;
self.loanDeductions = ko.observableArray(ko.utils.arrayMap(deductions, function (deduction) {
return new deductionLine(deduction.deductionID, deduction.deductionName, deduction.amount)
}));
self.loanDeductionsList = ko.observableArray(ko.utils.arrayMap(deductions, function (deduction) {
return new deductionLine(deduction.deductionID, deduction.deductionName, deduction.amount)
}));
self.selectedDeduction = ko.observable();
self.selectedDeduction.subscribe(function (data) {
self.loanDeductions.push({
deductionID: data.deductionID,
deductionName: data.deductionName,
amount: data.amount,
});
});
}
你能帮我找到一种方法,让我的函数 selectedDeduction.subscribe() 仅在要推送的项目不存在于我的 loanDeductions observableArray 时推送数据。
任何帮助将不胜感激。谢谢!
我有点意识到我填充下拉列表的方式可能不是最好的方式,我愿意建议更好的方式并重写我的程序。
【问题讨论】:
-
ko.utils.arrayMap 在 LoanDeductions 函数中使用相同的参数被调用了两次。您可以改为声明两个空数组,然后在 for 循环中迭代推导一次,以使用从推导数组中的元素创建的 deductionLine 对象初始化两个数组。这会执行得稍微快一些,并且不会有任何重复的代码。