4

タイプスクリプトでノックアウトのオブザーバブルを拡張する例を投稿してもらえますか? ノックアウト エクステンダー: http://knockoutjs.com/documentation/extenders.html

2013 年 3 月 6 日からこのバージョンの knockout.d.ts を使用してい ます https://github.com/borisyankov/DefinitelyTyped/tree/master/knockout

編集:どうもありがとうございました! したがって、拡張するには、インターフェース KnockoutExtenders を「ただ」追加して、typescript が「許可」するようにする必要があります。例

interface KnockoutExtenders {
    logChange(target: any, option: string): KnockoutObservableAny;
}

ko.extenders.logChange = function (target, option) {
    target.subscribe(function (newValue) {
    console.log(option + ": " + newValue);
    });
return target;
};

ビューモデル内で次のように宣言します。

this.score = ko.observable(score).extend({ logChange: "score" });
4

2 に答える 2

5

typescript のインターフェイスは無制限なので、複数の場所に追加できます。

例えば数値。このメンバーをエクステンダーとオブザーバブルにアプリする必要があります。次に例を示します。

interface KnockoutExtenders {
    numeric(target: any, precision: number): KnockoutObservableAny;
}
interface KnockoutObservableNumber {
    extend(data: any): KnockoutObservableNumber;
}
ko.extenders.numeric = function (target: KnockoutObservableNumber, digits) {
    var result = ko.computed({
        read: function () {
            var value = target();
            var toret: string = value.toString();
            if (toret.length < digits) {
                toret = "0" + toret;
            }
            else if (toret.length > digits) {
                toret = toret.substring(0, digits);
            }
            return toret;
        },
        write: target
    });

    result(target());
    return result;
};

ここで完全なサンプルを見ることができます: https://github.com/basarat/ChessClock/blob/d82a565ac9720cce00c75f099fcf7003f496755a/ChessClock/ChessClock/www/main.ts

于 2013-03-15T04:26:16.343 に答える
1

コメントに基づいて更新します。その場合、インターフェイスを個別に定義ファイルに拡張する必要があります。

interface KnockoutExtenders {
    logChange: (target: KnockoutObservableAny, option: string) => KnockoutObservableAny;
}
于 2013-03-12T12:07:47.843 に答える