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' } }); 

请让我知道如何做的奖杯名称,类别和PrizeMoney?

我试图利用作为
http://knockoutjs.com/documentation/plugins-mapping.html提到“使用‘创造’自定义对象的构造”,但它是建立一个重复的奖杯阵列项目,例如,如果我在奖杯生成的目标有两个列表项也有两个项目,但它是最后一个项目的副本

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

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

回答

0

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

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

我复制你的代码,并抓我的头,为什么它没有工作,直到我把它改成

ko.mapping.fromJS(...) 
+0

谢谢科里科尔。问题不在于ko.mapping.fromJSON,而是与奖杯对象,你的代码的区别在于你使用self(this)引用,比如self.Name,self.Trophy和self.PrizeMoney。这样就解决了这个问题。 – Swamy

-1

看看这个例子upida.azurewebsites.net

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

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

+0

嗯......看起来不像是对我的回答 – kleopatra