【发布时间】:2014-05-02 11:55:13
【问题描述】:
我之前一直在做一些简单的淘汰赛,但这个感觉更复杂。 客户希望能够在下拉菜单的帮助下控制表单中的订单行数(我问他们为什么不想要常规的添加按钮,但他们说这会让他们更好地了解所有内容都已填写...)。
我有一个 observable 保存下拉列表中的值和一个 observableArray 来保存订单行,但是当新值小于以前的值时,我必须确认选择是预期的。
所以我开始在互联网上搜索如何实现这一点的提示和技巧。 首先我找到了this "confirmable" extender。如果他们选择的行数少于之前的值,它会帮助我显示一个确认对话框,但我发现无法从中与视图模型中的其他可观察对象进行交互。
所以我用 Google 搜索了更多内容,并找到了 the first answer from Michael Best here。使用“subscribeChanged”函数,我现在可以(在可确认扩展器完成它的部分之后)向可观察的订单行数组添加或删除行。
但是。我希望有一些更好的方法来实现这一点,以便在多个地方没有几乎完全相同的代码。因为现在我在扩展器中有这段代码
if (!isValidateInteger(current) && isValidateInteger(newValue)) {
target(newValue);
// TODO: Add rows to vm.orderRows so the count reflects newValue
}
以及 subscribeChanged 函数中的这段代码
if (!isValidateInteger(current) && isValidateInteger(newValue)) {
// NOTE: Add rows to vm.orderRows so the count reflects newValue
difference = (newValueInt - currentInt);
message += '<br />Add ' + difference + ' row(s).';
for (var i = 0; i < difference; i++) {
vm.orderRows().push(new OrderRow());
}
vm.orderRows.valueHasMutated();
}
我将this fiddle 与我今天的代码摘录放在一起。
我知道有些 if 语句不需要存在,但它们目前用于调试目的。当功能完成和测试时,我会查看要删除的内容,但欢迎任何指针(即使是与问题无关的指针)。
提前致谢,路德维格
【问题讨论】: