-1

次のようなdiv内にデータバインディングonClickがあります:

data-bind='click: $root.addTable'

クリックが呼び出される前にJavaScriptを実行することは可能ですか?それが特定の条件を満たす場合、クリックを呼び出さないでください。

何かのようなもの ?:

<div id="onThisClick" data-bind='click: $root.addTable'></div>

$("#onThisClick").delegate("#all", "click", function() {
if(isTrue){
}
else {
 //run data binding as normal
}
}

いくつかの検証を実行しており、呼び出されたjavascript関数に値を渡す必要があります。

4

3 に答える 3

2

呼び出されたメソッドでチェックインを実行しないのはなぜですか?

<div class="button" data-bind="click: $root.addTable">Click</div>

// in javascript
function RootViewModel() {
    this.addTable = function() {
        if(!condition) {
            return; 
        }
        // jumps out when a condition is met

        // do what you're supposed to do here
    }
}

条件とリターン以上に複雑にする必要はありません。


編集: jQuery を既に使用している場合、HTML から値を取得するのは簡単です。非表示フィールドを使用している場合の例を次に示します (次のコマンドで取得できますval():

<input type="hidden" id="myvalue" value="true"></input>

// in javascript code, select the element by it's id
if ($("#myvalue").val()) return;

// plain vanilla JS is a bit more verbose
if (document.getElementById("myvalue").value === "true") return;

このjsfiddleをアイデアでいじることができます。

于 2013-03-08T20:11:14.653 に答える
0

あなたの問題は、で定義された関数を呼び出したが、 (バインディング時のビューモデル) の$rootプロパティにアクセスしたいということだと思います。$dataKnockout はapply()メソッドを使用してバインドされた関数を呼び出し、現在のビュー モデルを最初のパラメーターとして渡します。したがって、関数内で$data使用できます(クリックイベントを介して呼び出された場合)。this

于 2013-03-09T03:20:22.697 に答える
-1

ノックアウト JS について聞いたことがあり、それについて学ぶことに興味がありますが、この 1 つの例では、何の役にも立ちません。一方、JQuery は次のようになります。

$(function() {
    $root = $("#root");
    $root.addTable = function() {
        $root.html("Hooray!");
    };

    $("#onThisClick").on("click", function() {
       $root.html("");
       if($("#theText").val().match(/sad/)){
           alert("Must not be sad to see table!");
       }
       else {
          $root.addTable();
       }
   });

});

うまく機能しているようです。渡す必要がある値は、他の HTML5属性を addTable()使用して問題なくアクセスできます。フィドルをチェックして、それをフォークして、あなたのために働かせてくださいdata

于 2013-03-08T20:02:42.200 に答える