【问题标题】:Knockout mapping - validate arrays敲除映射 - 验证数组
【发布时间】:2013-07-17 23:16:28
【问题描述】:

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

我的对象定义

//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”自定义对象构造',但它正在创建一个重复的奖杯数组项,例如,如果我在奖杯中有两个列表项结果对象也有两个项目,但它与最后一个项目重复

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    我复制了你的代码,但我一直在摸不着头脑,为什么直到我将它更改为它才起作用

    ko.mapping.fromJS(...)
    

    【讨论】:

    • 感谢科里科尔。问题不在于 ko.mapping.fromJSON,而在于 trophies 对象,您的代码的不同之处在于您使用 self(this) 进行引用,例如 self.Name、self.Trophy 和 self.PrizeMoney。这样就解决了问题。
    【解决方案2】:

    看看这个例子upida.azurewebsites.net

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

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

    【讨论】:

    • 嗯...看起来不像是我的答案
    猜你喜欢
    • 1970-01-01
    • 2012-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-22
    • 1970-01-01
    • 2013-06-01
    • 2023-03-29
    相关资源
    最近更新 更多