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

Я могу установить проверку, как «требуется» с помощью проверки kò для простых типов, таких как «Имя», но я не могу установить в призах, который является массивом. Для простых типов, которые я использую, как показано ниже

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

Все, что мне нужно, это проверить свойства в массиве. Спасибо

ответ

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

Смежные вопросы