1

私はノックアウトjsをいじって楽しんでいて、カスタムのbindingHandlersを追加することに慣れ始めたところです。

サードパーティのjqWidgetゲージの更新機能に少し苦労しています-変数を最初に更新したときにのみアニメーション化できます。その後の更新のたびに、値を直接設定するだけです。

他の多くの例で見たものの、ko.utils.registerEventHandler()とその機能を完全には理解していません。これがアニメーションの中断の原因ですか?サードパーティのウィジェットから登録するイベントを知るにはどうすればよいですか?

何らかの理由で、これもobservableにバインドされているjqueryuiスライダーを追加すると正常に機能します。

ここでこれをテストできます。値を数回設定して、その後ではなく、最初にアニメーション化されることを確認します。

http://jsfiddle.net/LkqTU/4531/

4

2 に答える 2

2

入力フィールドを更新すると、observableは文字列になります。少なくとも最初の時点では、ゲージが文字列値で更新されることを好まないようです。

したがって、番号(、、、または状況に応じて)で更新していることを確認すると、正常に更新されているparseIntようparseFloat+見えます。

何かのようなもの:

update: function(element, valueAccessor) {
    var gaugeval = parseInt(ko.utils.unwrapObservable(valueAccessor()), 10);   
    $(element).jqxGauge('value', gaugeval || 0);
}

http://jsfiddle.net/rniemeyer/LkqTU/4532/

通常、このようなシナリオでは、ビューモデルデータを更新するユーザーが行った変更に対応するために、イベントハンドラーのみを登録します。たとえば、ユーザーがゲージをクリックして値を変更する方法がある場合は、そのイベントを処理し、それに応じてビューモデルの値を更新する必要があります。

于 2012-10-16T15:36:44.743 に答える
1

私は答えています

ko.utils.registerEventHandler()とその機能を完全には理解していません

あなたの質問の一部。

registerEventHandlerクロスブラウザ互換の方法でイベントハンドラ関数を登録します。jQueryを使用している場合、KnockoutはjQueryのbind関数を使用してイベントハンドラーを登録します。それ以外の場合は、ブラウザ間で一貫した動作をするブラウザWebAPIを使用します。

ソースコードで確認できます。

于 2015-03-27T17:19:09.057 に答える