【问题标题】:Format Kendo grid column filter for percentages为百分比设置 Kendo 网格列过滤器格式
【发布时间】:2015-06-03 21:43:15
【问题描述】:

我有一个剑道网格,我的数据源数据返回小数位未知的数字。所以我在数据源上使用了一个解析函数来弥补这一点。

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/

有没有办法让 parse 和 filterable 一起正常工作?

【问题讨论】:

  • 你能帮我澄清一下吗?是否会有超过 100% 的情况?因此,我希望您正在寻找类似输入 25.0231 的用户在用于过滤时将是 0.250231 的内容。例如是 0% - 100% 的范围,或者可以是 0% 到 100+% 的任何值
  • 好问题。看起来它永远不会超过 100%。并且正确 - 如果用户输入 25.0231,我希望它过滤数据源为 0.250231,但向用户显示为 25.0231%。

标签: javascript kendo-ui kendo-grid kendo-datasource


【解决方案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

【讨论】:

  • 对。但是如果我手动输入一个数字,它仍然会乘以 100。所以 12.7 -> 127.0000%。我希望它保持在 1.2700%。
  • 你试过了吗?它对我不起作用......即使删除“更改时,触发更改”无限循环:) 我认为你正在做一些事情。我得玩弄它。
  • 它可以工作,但它会触发无限循环并引发调用堆栈错误i.imgur.com/rLgHY6H.png 必须有一个解决方法。我还没玩过。
  • 仅供参考-使用您的解决方案,我无法输入小于 1 的数字(因此无法输入 0.16)。我在这里进行了修改以允许所有数字。 jsfiddle.net/dmathisen/zjvsqyjh
  • @dmathisen 这是一个很好的解决方案,但在这种情况下您应该将step 值设置回1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多