0

現在のプロジェクトでは、knockout.jsとhammer.jsの両方を使用しています。Hammer.jsで「tap」イベントのカスタムバインディングハンドラーを作成しました(これは、holdやswipeなどの他のイベントでも機能するはずです)。私の問題は、このバインディングハンドラーで、HTMLのdata-bind属性で提供するメソッドを呼び出したいということです。ノックアウトのドキュメントによると、valueAccessor()を呼び出す必要があることがわかりましたが、残念ながら、これでは何も実行されません。私はこのフィドルを作成しました。これは私の問題の明確な例を与えるはずです。助けてくれてありがとう。

HTML:

<button data-bind="tap: myFunction">Click Me</button>

JS:

ko.bindingHandlers.tap = {
    'init': function(element, valueAccessor) {

        var tap = new Hammer(element);
        tap.ontap = function(ev){
            //call the method provided in HTML, in this case doSomething();
            // I've tried calling valueAccessor(); but this doesn't seem to work
        };
    }
}

ko.applyBindings({
    myFunction: function() {
        document.write("BAM!");
    }
});
4

1 に答える 1

1

呼び出すvalueAccessorと、バインディングで設定されたオブジェクトにアクセスできるようになります。これは関数であり、呼び出したいので、を呼び出した結果を呼び出す必要がありますvalueAccessor

ko.bindingHandlers.tap = {
    'init': function(element, valueAccessor) {
        var tap = new Hammer(element);
        var value = valueAccessor(); // get the value (the function)
        tap.ontap = function(ev){
            //call the method provided in HTML, in this case doSomething();
            value(); // call the function
        };
    }
}

更新されたフィドル

于 2012-12-17T16:38:18.767 に答える