Отображение нокаута - проверка массивов

Как установить валидацию для массивов, используя валидацию?

Определение моего объекта

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

Я могу установить валидацию как 'required', используя ko validation для простых типов, таких как 'Name', но я не могу установить 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 но он создает дублированный элемент массива трофеев, например, если у меня есть два элемента списка в трофеях, результирующий объект также имеет два элемента, но он дублирует последний элемент

// 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 ответа

Решение

Вот JSFiddle, использующий отображение. Я думаю, что ваша проблема может быть следующей строкой:

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

Я скопировал ваш код и почесал голову, почему он не работает, пока я не изменил его на

ko.mapping.fromJS(...)

Взгляните на этот пример http://upida.azurewebsites.net/client

Нажмите - Добавить заказ, и в новом окне вы увидите Массив продуктов. Попробуйте добавить несколько товаров и заполнить их данными. Попробуйте сохранить и посмотреть, как работает валидация, это knockout.js.

Это проверка на стороне сервера, без каких-либо ограничений на стороне клиента.

Другие вопросы по тегам