1

如何使用敲除验证将验证设置为数组?

我的对象定义

//c# code
public class Trophy
{
    public string Name { get; set; }
    public string Category { get; set; }
    public double PrizeMoney { get; set; }
}

public class Player
{
    public string Name { get; set; }
    public List<Trophy> Trophies { get; set; }
}

我可以使用 ko 验证为简单类型(如“名称”)设置验证,如“必需”,但我无法设置为数组的奖杯。对于我使用的简单类型如下

// javascript code 
var localModel = ko.mapping.fromJSON(getPlayerModelJson());

// Validation
localModel.Name.extend({ required: { message: 'Please enter first name' } });

请让我知道如何在奖杯中填写姓名、类别和奖金?

我尝试使用
http://knockoutjs.com/documentation/plugins-mapping.html中提到的“使用“create”自定义对象构造”,但它正在创建一个重复的 Trophies 数组项,例如,如果我有两个Trophies 中的列表项 生成的对象也有两项,但与最后一项重复

// Java script code
var Trophies = function (data) {

    Name = ko.observable(data.Name).extend({ required: { message: 'Please enter name' } }),
    Category = ko.observable(data.Category),
    PrizeMoney = ko.observable(data.PrizeMoney)
}

var localModel = ko.mapping.fromJSON(getPlayerModelJson(), TrophiesMapping);

//Custom mapping
var TrophiesMapping = {
    'Trophies': {
        create: function (options) {
        return new Trophies(options.data);
        }
    }
} 

我想要的只是验证数组中的属性。谢谢

4

2 回答 2

0

这是一个使用映射的 JSFiddle。我认为您的问题可能是以下行:

var localModel = ko.mapping.fromJSON(getPlayerModelJson(), TrophiesMapping);

我复制了您的代码,并且一直在摸索为什么它不起作用,直到我将其更改为

ko.mapping.fromJS(...)
于 2013-07-19T02:29:05.560 回答
-1

看看这个例子upida.azurewebsites.net

单击 - 添加订单,在新窗口中您将看到产品阵列。尝试添加几个产品,并用数据填充它们。尝试保存,看看验证是如何工作的,它是 knockout.js。

它是服务器端验证,没有任何客户端约束。

于 2013-08-22T00:16:46.833 回答