0

myFunction を change または onchange イベントにバインドしたい。

これは、ViewModel 内でバインドしたい関数です。

myFunction: function spinSeconds(event, ui) {
  if (ui.value >= 60) {
      $(this).spinner('value', ui.value - 60);
      $('#minutes').spinner('stepUp');
      return false;
  } else if (ui.value < 0) {
      $(this).spinner('value', ui.value + 60);
      $('#minutes').spinner('stepDown');
      return false;
  }
}

私は openModal() 関数内でこの関数を呼び出しています:

function openModal() {

    //
    //some code here
    //

    $('#seconds').spinner({
        spin: spinSeconds
    });
}

私は次のように使用しています:

<div class="col-sm-9">
   <input id="seconds" value=10 size=2 data-bind="value: PreExecWaitMin, event: {change: myFunction}" /> minutes
</div>

そして、私はこのエラーに直面しています:

'Uncaught ReferenceError: Unable to process binding "event: function (){return {change:myFunction} }" Message: spinSeconds is not defined'

多くのイベント バインディングの例を検索しましたが、私の問題では処理できませんでした。助けてくれてありがとう。

4

1 に答える 1

1

イベント バインド関数の最初の引数$dataです。2つ目はイベントです。しかし、入力の変更イベントを観察する方法は、boundにサブスクライブvalueすることです。

上級ユーザーの場合、オブザーバブルの変更を通知するために独自のサブスクリプションを登録したい場合は、サブスクライブ関数を呼び出すことができます。例えば:

myViewModel.personName.subscribe(function(newValue) {
    alert("The person's new name is " + newValue);
});

サブスクライブ機能は、KO の内部で動作する部分の数です。組み込みのバインディングとテンプレート システムがサブスクリプションを管理するため、ほとんどの場合、これを使用する必要はありません。

多くの場合、解決策は、値にバインドされた変数に基づいて計算を設定することです。サブスクリプションは暗黙的です。

spinner独自のカスタム バインディング ハンドラーがあればより良いでしょうが、これは単なる視覚効果のように見えるため、おそらくこれで問題を解決できます。jQuery セレクターは、Knockout の重要なコード臭です。

于 2016-03-11T02:22:49.353 に答える