Проблемы с проверкой нокаута

У меня есть следующие проблемы с проверкой моей модели нокаута, и я не знаю, как их решить. Ниже приведена моя модель, прежде всего, с правилами проверки:

var Data = function (data) {
this.Val = data;
}

function ViewModel(item) {
var parse = JSON.parse(item.d);
var self = this;
this.Name = ko.observable(parse.Name);
this.UserType = ko.observable(parse.UserType);
this.ID = ko.observable(parse.ID).extend({ required: { params: true, message: "ID is    required" }, decimal: { params: 2, message: "Should be decimal"} });
this.Username = ko.observable(parsed.Username).extend({ required: {
        onlyIf: function () {
            return self.UserType() > 1;
        }
    }   
});

this.WeeklyData = ko.observableArray([]);
var records = $.map(parse.WeeklyData, function (data) { return new Data(data) });
this.WeeklyData(records);
this.WeeklyData2 = ko.observableArray([]);
var records = $.map(parse.WeeklyData2, function (data) { return new Data(data) });
this.WeeklyData2(records);
}

ko.extenders.numeric = function (target, precision) {
var result = ko.dependentObservable({
    read: function () {
        return target().toFixed(precision);
    },
    write: target
});

result.raw = target;
return result;
};

Вот мои проблемы:

1) с наблюдаемым идентификатором () я хочу ограничить его двумя десятичными точками, поэтому я создал «числовой» расширитель проверки, но он не работает. Что-то не так с тем, как я его использую и как это исправить?

2) Кроме того, если я хочу ограничить наблюдаемую целыми числами, как я могу это сделать?

3) когда я определяю правило с условием (например, имя пользователя()), как мне определить для него собственное сообщение? Я смог сделать это для правил по умолчанию, но с условными правилами это не работает.

4) У меня есть два наблюдаемых массива WeeklyData1 и WeeklyData2, каждый из которых содержит объекты Data(). Я хочу иметь отдельные минимальные/максимальные правила для этих двух, например, мин/макс - 1,7 для WeeklyData1 и мин/макс - 1,150 для WeeklyData2. Как я могу это сделать?

4) Прямо сейчас мои сообщения об ошибках появляются прямо рядом с полем данных, но я хочу, чтобы все они отображались в одной сводке проверки, отображая «*» напротив поля. Мне сказали использовать Validation-bindings, но я не уверен, как его использовать, может кто-нибудь привести пример?

Я знаю, что вопросов много, но я признателен, если кто-то может помочь.

заранее спасибо


person devC    schedule 02.04.2013    source источник


Ответы (1)


Вместо того, чтобы копаться в вашем коде, я создал небольшую демонстрацию для ваших вопросов. Итак, поехали,

1) с наблюдаемым ID() я хочу ограничить его двумя десятичными точками.... и 2) Кроме того, если я хочу ограничить наблюдаемое целыми числами....

Ваш 1 и 2 вопрос очень похожи, поэтому я рассмотрел оба вопроса в одной скрипке. Проверьте эту скрипту.

3) когда я определяю правило с условием (т.е. имя пользователя()), как мне определить пользовательское сообщение....

Вы можете использовать свойство message для установки пользовательских сообщений, Проверьте эту скрипту .

4) У меня есть два наблюдаемых массива WeeklyData1 и WeeklyData2, каждый из которых содержит объекты Data().

Я не понимаю, что это за вопрос, какой тип данных содержит оба этих массива и для чего вы хотите установить правило min/max (длина массива или другое). Поэтому, пожалуйста, очистите это, чем я постараюсь помочь в этом.

5) Прямо сейчас мои сообщения об ошибках появляются прямо рядом с полем данных.....

Ответ на этот вопрос я уже дал в вашем как? с проверкой нокаута js вопрос (проверить обновление).

Дайте мне знать, если это поможет!

person Gaurav    schedule 02.04.2013
comment
re: 4) обе наблюдаемые содержат числовые данные. Скажем, WeeklyData1 содержит 21,45,54,19 (мин/макс должно быть 15/60). WeeklyData2 содержит количество дней, поэтому min/max должно быть 0/7. Здесь min/max означает НЕ длину массива, а границы для каждого элемента. - person devC; 03.04.2013
comment
огромное спасибо за ваши ответы. Они работают хорошо. Пожалуйста, ответьте и на мой четвертый вопрос. - person devC; 03.04.2013
comment
Вы можете создать собственное правило проверки, которое решит вашу четвертую проблему, проверьте этот github. com/ericmbarnard/ - person Gaurav; 03.04.2013
comment
Кстати, я отредактировал вашу скрипку следующим образом, но она не дает никаких проверок: function VM() { var self = this; self.Age = ko.observable(0).extend({ min: {params: 10, message: Error} }); self.Salary = ko.observable(0).extend({числовое: 2}); } в основном, я хочу, чтобы сообщение об ошибке выдавалось, когда я даю значение, подобное 3, для Age, но это не так. Есть идеи, в чем проблема? - person devC; 03.04.2013
comment
Можете ли вы дать отредактированную ссылку на скрипку? - У меня это работает, извините за беспокойство. Можно ли создать пользовательское правило проверки для всего наблюдаемого массива? Моя проблема в том, что я хочу выполнять минимальные/максимальные проверки для каждого элемента в массиве. - person devC; 03.04.2013
comment
Кажется, я нашел пример здесь: github.com/ericmbarnard/Knockout- Проверка/вики/ - person devC; 03.04.2013
comment
У меня есть следующая настройка скрипача, чтобы продемонстрировать, что я хочу, но я не могу заставить ее работать. Сможете ли вы помочь? jsbin.com/ocizes/9/edit - person devC; 03.04.2013