1

私は<span>それにいくつかのバインディングを持っています。enable、およびclick

<span data-bind="enable: buttonEnabled, click: takeAnAction">Take An Action</span>

私が作成できるカスタム バインディング ハンドラー、またはバインディングが falseclickの場合にバインディングを尊重する (そして動作しない)別の簡単な方法はありますか?enable

ifアクションにステートメントを追加できることはわかっていますclickが、ビューに余分なロジックを追加せずにこのアクションを自動化できれば素晴らしいと思います。

4

3 に答える 3

1

RP Niemeyer's answerに基づいています。より単純な (ただし拡張性に欠ける) 解決策は、要素のenableプロパティをカスタム バインディング ハンドラーで直接参照することです。

ko.bindingHandlers.clickIfEnabled = {
    init: function(element, valueAccessor, allBindingsAccessor) {
        var action = ko.utils.unwrapObservable(valueAccessor()),
            wrappedHandler = function(data, event) {
               if (allBindingsAccessor().enable()) {
                  action.call(data, data, event);
               }
            };

        ko.applyBindingsToNode(element, { click: wrappedHandler });        
    }
};

次のように使用します。

<span data-bind="enable: isEnabled, clickIfEnabled: test">Test</span>

この方法では、1 つの標準バインディングのみを変更できます。clickclickIfEnabled

例: http://jsfiddle.net/LZTtE/6/

于 2013-05-14T19:18:55.393 に答える