Фильтр столбцов сетки Format Kendo для процентов

У меня есть сетка кендо, и данные моего источника данных возвращают число с неизвестными десятичными знаками. Поэтому я использую функцию синтаксического анализа в источнике данных, чтобы компенсировать это.

DefaultMonoCPP: {
    editable: false,
    type: "number",  
    parse: function(e) {
        return  kendo.parseFloat(kendo.toString(e,"p4")); 
    }
}

Теперь, когда я фильтрую, я не хочу, чтобы процент автоматически умножался на 100. Поэтому я установил filterable в столбцах.

    {
        field: "DefaultMonoCPP",
        title: "Mono Cost",
        format: '{0:p4}',
        filterable: {
            ui: function(e) {
                e.kendoNumericTextBox({
                    //format: "{0:p4}",
                    //format: "p4",
                    format: "##.0000 \\%",
                    decimals: 4
                });
            }
        }
    }

Но это искажает отфильтрованное число (1,2700% => 1,27). Так что фильтровать не получится.

JSFiddle для уточнения: http://jsfiddle.net/dmathisen/mecny50f/

Есть ли способ, чтобы синтаксический анализ и фильтрация работали правильно вместе?


person dmathisen    schedule 03.06.2015    source источник
comment
можете ли вы кое-что прояснить для меня. Будет ли когда-нибудь случай, когда что-то будет больше 100%? Поэтому я ожидаю, что вы ищете что-то вроде того, что пользователь, вводящий 25.0231, будет 0.250231 при использовании для фильтрации. например это диапазон от 0% до 100% или может быть любая форма от 0% до 100+%   -  person David Shorthose    schedule 04.06.2015
comment
Хороший вопрос. Похоже, больше 100% никогда не будет. И правильно - если пользователь вводит 25.0231, я бы хотел, чтобы он отфильтровал источник данных для 0.250231, но отображал для пользователя как 25.0231%.   -  person dmathisen    schedule 04.06.2015


Ответы (1)


Мое предложение состояло бы в том, чтобы отформатировать числовое текстовое поле в процентах и ​​установить шаг 0,01, чтобы он увеличивался/уменьшался на 1% за раз. Если вы беспокоитесь о том, что пользователь введет процент как целое число, обработайте его в событии изменения.

e.kendoNumericTextBox({
    format: '{0:p4}',
    step: 0.01,
    decimals: 4,
    change: function () {
        var val = this.value();
        if (val > 1) {
            this.value(val / 100);
            this.trigger("change");
        }
    }
});

JSFiddle

person AlliterativeAlice    schedule 03.06.2015
comment
Верно. Но если я ввожу число вручную, оно все равно умножается на 100. Итак, 12,7 -> 127,0000%. Я бы хотел, чтобы он остался на уровне 1,2700%. - person dmathisen; 04.06.2015
comment
Вы пробовали это? У меня это не работает ... даже при удалении при изменении запускать бесконечный цикл изменения :) Я думаю, что вы что-то делаете. Мне придется поиграть с этим. - person dmathisen; 04.06.2015
comment
Это работает, но вызывает бесконечный цикл и выдает ошибку стека вызовов i.imgur.com/rLgHY6H.png Должен быть обходной путь. Я еще не играл с ним. - person dmathisen; 04.06.2015
comment
К вашему сведению - с вашим решением я не смог ввести числа меньше 1 (поэтому ввод 0,16 не сработает). Я сделал модификацию здесь, чтобы учесть все числа. jsfiddle.net/dmathisen/zjvsqyjh - person dmathisen; 04.06.2015
comment
@dmathisen Это хорошее решение, но в этом случае вы должны установить значение step обратно на 1. - person AlliterativeAlice; 04.06.2015