2

現在、Knockout でカスタム バインディングを作成するためのドキュメントを調べていて、概念は理解できますが、実際に適用するのに苦労しています。

具体的には、slideUp/slideDown jQuery アニメーションを if バインディングに提供したいと考えています。ただし、KO にカスタム バインドを「表示」させるだけで問題が発生しています。バインディングの拡張に関する正しい方向へのポイントは、非常に高く評価されます。

その他の注意事項:

hereの KO 外部テンプレート エンジンを次のように使用しています。

<!-- ko template: { name: 'SummaryBox', if: expanded } --><!-- /ko -->

そして、デフォルトの「if」をラップする非常に基本的なカスタム バインディングを作成しました。

ko.bindingHandlers['slidingIf'] = {
    init: function(element, valueAccessor, allBindingsAccessor, context) {
        return ko.bindingHandlers['if']['init'](element, valueAccessor, allBindingsAccessor, context);
    },
    update: function(element, valueAccessor, allBindingsAccessor, context) {
        return ko.bindingHandlers['if']['update'](element, valueAccessor, allBindingsAccessor, context);
    }
};
ko.virtualElements.allowedBindings['slidingIf'] = true;

しかし、以前のバインディングをこれに置き換えると、

<!-- ko template: { name: 'SummaryBox', slidingIf: expanded } --><!-- /ko -->

テンプレートは基本的に「slidingIf」バインディングを無視し、テンプレートをそのまま表示します。

4

2 に答える 2

2

バインディングに渡される値は、そのtemplateバインディングのオプションであり、実際には独自の個別のバインディングではありません。したがって、templateバインディング自体はバインディングについて認識しませんslidingIf

slidingIf独自のバインディングを使用するかtemplate、アニメーションを実行するバインディングにラッパーを記述する必要があります。

于 2012-07-17T15:08:50.530 に答える