【问题标题】:KnockoutJS validation combining two observables?结合两个可观察对象的 KnockoutJS 验证?
【发布时间】:2017-10-09 06:41:19
【问题描述】:

我有以下用户界面:

我们对其频率有限制的收入。例如,如果选择monthly,那么用户可以输入的最大值是999999.99,但是,如果选择fortnightly,那么用户可以输入的最大值是499999.99

如何使用 KnockoutJS 及其验证库 (Knockout-Validation) 实现这一目标?

现在,我有以下内容:

self.validate = ko.validatedObservable([
  self.usualTakeHomePayAmount.extend({
    min: {
      params: 0,
      message: minCurrencyAmountErrorMessage.toString()
    },
    max: {
      params: 999999.99,
      message: maxCurrencyAmountErrorMessage.toString()
    }
  })]);

但显然这并没有考虑频率场(截图中标题为“频率”)。

如何实现所需的验证?

【问题讨论】:

    标签: javascript validation knockout.js


    【解决方案1】:

    您可以创建一个根据所选频率返回最大数量的计算值,然后使用它。

    self.maxValue = ko.pureComputed(function() {
        switch(self.selectedFrequency())
            case "fortnightly":
                return 499999.99
            case "monthly":
                return 999999.99
            default:
                return 999999.99
    });
    

    然后在需要引用最大值的地方使用这个计算值:

    self.validate = ko.validatedObservable([
        self.usualTakeHomePayAmount.extend({
            min: {
                params: 0,
                message: minCurrencyAmountErrorMessage.toString()
            },
            max: {
                params: self.maxValue(),
                message: maxCurrencyAmountErrorMessage.toString()
            }
    })]);
    

    我在这里假设您在名为 selectedFrequency 的 observable 中有频率。我没有对此进行任何测试,但希望它可以让您了解可以采取的方法。

    【讨论】:

    • 这似乎是个好主意,但它不起作用。假设您在每月,并且您键入 999999.99,但随后您从 每月 更改为 每两周,验证不会再次触发以告诉您现在它无效!
    • 你的想法给了我一个解决这个问题的想法。我创建了一个函数,我将频率传递给它,它会返回最大值。
    猜你喜欢
    • 1970-01-01
    • 2012-04-20
    • 1970-01-01
    • 2014-01-02
    • 2017-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-18
    相关资源
    最近更新 更多