0

モデルに C# のようなプロパティを設定するために、knockout.js の計算されたオブザーバブルを使用しようとしています。オブザーバブルが有効な値のみを受け入れるようにします。簡単な例:

function Model()
{
    var a = 100;
    var b = 200;

    var $ = this;
    this.a = ko.computed({
        read: function(){return a},
        write: function(value){
            var newval = parseFloat(value, 10);
            if(newval < 1000) 
                a = newval;
        }});

    this.b = ko.observable(b);
}

hover への書き込みaはバインディングを更新しません。aの通常のメンバーであるModelが、追加の機能が添付されているかのように変更できるようにすることは可能ですか?

2番目のオブザーバブルを使用して実際の値を格納し、その更新メカニズムに依存できることはわかっていますが、この種の計算されたプロパティの数が増えると、このアプローチはすぐに面倒になります。

4

1 に答える 1

1

計算されたオブザーバブルは、1 つ以上の他のオブザーバブルに依存する必要がある関数であるため、この例には適していません。

代わりにエクステンダーを使用してこれを実現できます。これがデモのフィドルです。

ko.extenders.maxNumber = function(target, option) {
    var result = ko.computed({
        read: target,
        write: function(value){
            var newval = parseFloat(value, 10);
            if (newval < option) {
                target(newval);
            } else {
                alert('Number is to big');
            }
        }
    });

    result(target());

    return result;
};

function Model() {
    var a = 100;
    this.a = ko.observable(a).extend({ maxNumber: 1000 });
}
于 2013-06-10T18:50:32.950 に答える