【问题标题】:Knockout validation issues淘汰赛验证问题
【发布时间】:2013-04-02 10:36:29
【问题描述】:

我的淘汰赛模型验证存在以下问题,不知道如何解决。首先是我的模型,带有验证规则:

var Data = function (data) {
this.Val = data;
}

function ViewModel(item) {
var parse = JSON.parse(item.d);
var self = this;
this.Name = ko.observable(parse.Name);
this.UserType = ko.observable(parse.UserType);
this.ID = ko.observable(parse.ID).extend({ required: { params: true, message: "ID is    required" }, decimal: { params: 2, message: "Should be decimal"} });
this.Username = ko.observable(parsed.Username).extend({ required: {
        onlyIf: function () {
            return self.UserType() > 1;
        }
    }   
});

this.WeeklyData = ko.observableArray([]);
var records = $.map(parse.WeeklyData, function (data) { return new Data(data) });
this.WeeklyData(records);
this.WeeklyData2 = ko.observableArray([]);
var records = $.map(parse.WeeklyData2, function (data) { return new Data(data) });
this.WeeklyData2(records);
}

ko.extenders.numeric = function (target, precision) {
var result = ko.dependentObservable({
    read: function () {
        return target().toFixed(precision);
    },
    write: target
});

result.raw = target;
return result;
};

这是我的问题:

1) 具有可观察的 ID(),我想将其限制为两个小数点,因此我创建了验证扩展器“数字”,但它不起作用。我的使用方式和纠正方法有什么问题吗?

2) 另外,如果我想将 observable 限制为整数,我该怎么做?

3) 当我定义一个带有条件的规则时,(即用户名()),我如何定义一个自定义消息?我能够为默认规则做到这一点,但使用条件规则,它不起作用

4) 我有两个可观察的数组 WeeklyData1 和 WeeklyData2 都包含 Data() 对象。我想为这两个设置单独的最小/最大规则,例如,WeeklyData1 的 min/max - 1,7 和 WeeklyData2 的 min/max - 1,150。我怎样才能完成它?

4) 现在我的错误消息显示在数据字段旁边,但我希望所有这些消息都出现在单个验证摘要中,同时针对该字段显示“*”。我被告知使用Validation-bindings,但我不知道如何使用它,有人可以举个例子吗?

我知道有很多问题,但如果有人可以提供帮助,我将不胜感激。

提前致谢

【问题讨论】:

    标签: validation knockout.js numeric custom-errors


    【解决方案1】:

    我没有深入研究您的代码,而是为您的问题创建了一个小型演示。好的,我们开始吧,

    1) 对于 ID() 可观察对象,我想将其限制为两个小数点....和 ​​2) 另外,如果我想将可观察对象限制为整数....

    您的 1 和 2 问题非常相似,所以我在一个小提琴中涵盖了这两个问题。 Check this fiddle

    3)当我定义一个带有条件的规则时,(即用户名()),我如何定义一个自定义消息......

    您可以使用message 属性设置自定义消息,Check this fiddle

    4) 我有两个可观察数组 WeeklyData1 和 WeeklyData2 都包含 Data() 对象

    我不清楚这个问题是什么,这两个数组都包含什么类型的数据以及您要设置的最小/最大规则(数组长度或其他)。所以请清除这一点,然后我会尽力提供帮助。

    5) 现在我的错误消息出现在数据字段旁边.....

    我已经在您的how to? with knockout js validations 问题中给出了这个问题的答案(检查更新)。

    如果有帮助请告诉我!

    【讨论】:

    • re: 4) 两个 observables 都包含数字数据。假设 WeeklyData1 包含 21、45、54、19(最小值/最大值应为 15/60)。 WeeklyData2 包含天数,因此最小值/最大值应为 0/7。这里的 min/max 不是指数组长度,而是每个元素的边界。
    • 非常感谢您的回复。他们工作得很好。请同时回答我的第四个问题。
    • 您可以创建一个自定义验证规则来解决您的第四个问题,请查看github.com/ericmbarnard/…
    • 顺便说一句,我编辑了你的小提琴如下,但它没有给出任何验证: function VM() { var self = this; self.Age = ko.observable(0).extend({ min: { params: 10, message: "Error"} }); self.Salary = ko.observable(0).extend({ numeric: 2 });基本上,当我为 Age 提供 3 之类的值时,我希望抛出错误消息,但事实并非如此。知道问题是什么吗?
    • "你能给编辑的小提琴链接吗?" - 我有这个工作,抱歉麻烦。可以在整个 observablearray 上创建自定义验证规则吗?我的问题是我想对数组中的每个元素进行最小/最大验证。
    猜你喜欢
    • 2014-10-13
    • 2012-02-18
    • 1970-01-01
    • 2011-08-09
    • 1970-01-01
    • 2012-11-04
    • 1970-01-01
    • 2017-01-27
    • 1970-01-01
    相关资源
    最近更新 更多