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

Как установить проверку на массивы с помощью нокаутной проверки?

Мое определение объекта

//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, но он создает повторяющийся элемент массива 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);
        }
    }
} 

Все, что я хотел, это проверить свойства в массиве. Спасибо


person Swamy    schedule 18.07.2013    source источник


Ответы (2)


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

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

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

ko.mapping.fromJS(...)
person Corey Cole    schedule 19.07.2013
comment
Спасибо, Кори Коул. Проблема заключалась не в ko.mapping.fromJSON, а в объекте трофеев, разница в вашем коде заключалась в том, что вы ссылаетесь на self(this), например self.Name , self.Trophy и self.PrizeMoney. Так что проблема решилась. - person Swamy; 19.07.2013

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

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

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

person user2626270    schedule 22.08.2013
comment
хм... не похоже на ответ для меня - person kleopatra; 24.08.2013