【问题标题】:BreezeJS does not automatically parse numbers saved as strings with KnockoutJS bindingsBreezeJS 不会自动解析使用 KnockoutJS 绑定保存为字符串的数字
【发布时间】:2012-12-06 17:53:15
【问题描述】:

我使用以下代码使用 Breezejs 查询了我的数据库:

viewModel = {
    products = ko.observableArray([])
};

var manager = new entityModel.EntityManager('/api/Products');
manager.executeQuery(query)
       .then(function (data) {
           viewModel.products.removeAll();
           viewModel.products(data.results);
       });

但是,产品行包含数字属性,例如使用 data-bind 属性连接到我的页面的数量。通过manager.saveChanges() 保存模型时出现验证错误。这是因为 KnockoutJS 将编辑后的数字保存为字符串。

解决此问题的推荐方法是什么?

【问题讨论】:

    标签: validation knockout.js breeze


    【解决方案1】:

    从微风 v 0.80.2 开始,现在支持此功能。 (以及自定义类型强制的能力)

    【讨论】:

    • 谢谢,现在我们所有的自定义绑定处理程序都没用了:)
    【解决方案2】:

    一种选择是创建一个 CustomBinding。

    我用它来表示小数:

    ko.bindingHandlers.decimal = {
        init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
            $(element).blur(function () {
                var value = valueAccessor();
                var valor = Globalize.parseFloat($(element).val());
                if (ko.isWriteableObservable(value)) {
                    value(valor);
                    ko.bindingHandlers.decimal.update(element, valueAccessor);
                }
            });
        },
        update: function (element, valueAccessor, allBindingsAccessor) {
            var value = ko.utils.unwrapObservable(valueAccessor());
            $(element).val(Globalize.format(value, "n2"));
        }
    };
    

    【讨论】:

    • 优秀的样本,在许多情况下都有很大的效用。我确实认为 Breeze 应该处理通用强制,将自定义 KO 绑定留给特殊情况(例如,强制舍入到特定精度或将自定义日期符号 - “今天”、“昨天”等 - 转换为 DateTime 值)。不过,谢谢这个例子。
    【解决方案3】:

    这是个好问题。

    目前,breeze 不会尝试类型强制,但是...

    我们已经讨论过让 Breeze 自动尝试将 set 操作中使用的任何值强制转换为正在设置的属性的数据类型(如 brew 元数据中定义的那样)。这将发生在所有绑定库(即角度、主干等)以及淘汰赛中。

    请随时将此添加到微风User Voice。我们非常重视这些意见。

    【讨论】:

    猜你喜欢
    • 2012-08-23
    • 1970-01-01
    • 2018-03-11
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 2013-06-24
    • 1970-01-01
    • 2011-07-03
    相关资源
    最近更新 更多