我使用以下代码使用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
属性连接到我的页面的数字属性,例如Quantity。通过manager.saveChanges()
保存模型时,我收到验证错误。这是因为KnockoutJS将编辑后的数字保存为字符串。
解决此问题的推荐方法是什么?
答案 0 :(得分: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"));
}
};
答案 1 :(得分:1)
截至breeze v 0.80.2,现在支持此功能。 (以及自定义类型强制的能力)
答案 2 :(得分:0)
这是一个很好的问题。
目前,微风不会尝试强制类型,但是......
我们已经讨论过让Breeze自动尝试将set操作中使用的任何值强制转换为正在设置的属性的数据类型(如breeze元数据中所定义)。这将发生在所有结合文库中(即角,骨架等)以及敲除。
请随意将此添加到微风User Voice。我们非常重视这些提交。