Knockout映射 - 验证数组

时间:2013-07-18 20:15:39

标签: knockout.js knockout-mapping-plugin knockout-validation

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

我的对象定义

//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; }
}

我能够像'Name'这样的简单类型使用ko验证设置'required'之类的验证,但是我无法设置为Trophies,这是一个数组。对于简单类型,我使用如下

// 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但它正在创建一个重复的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);
        }
    }
} 

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

2 个答案:

答案 0 :(得分:0)

这是一个JSFiddle using mapping。我认为你的问题可能是以下几行:

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

我复制了你的代码并且在我将其更改为

之前为什么它不起作用
ko.mapping.fromJS(...)

答案 1 :(得分:-1)

看一下这个例子upida.azurewebsites.net

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

这是服务器端验证,没有任何客户端限制。