2

我使用以下代码使用 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);
       });

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

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

4

3 回答 3

1

一种选择是创建一个 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"));
    }
};
于 2012-12-19T12:12:23.560 回答
1

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

于 2012-12-24T09:05:07.250 回答
0

这是个好问题。

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

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

请随时将此添加到微风用户语音中。我们非常重视这些意见。

于 2012-12-19T16:38:59.540 回答