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

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 が設定操作内で使用されるすべての値を、設定されているプロパティのデータ型に自動的に変換しようとすることについて説明しました (breeze メタデータで定義されているように)。これは、ノックアウトだけでなく、すべてのバインド ライブラリ (角度、バックボーンなど) で発生します。

ぜひ、breeze User Voiceに追加してください。私たちはこれらの提出物を非常に真剣に受け止めています。

于 2012-12-19T16:38:59.540 に答える