2

ノックアウト js のカスタム バインディングでの次の動作に困惑しています。

ko.bindingHandlers.customBinding = {
    update: function(element, valueAccessor, allBindingsAccessor) {
        var value = ko.utils.unwrapObservable(valueAccessor());
        console.log( JSON.stringify(value) );
    }
}

ko.applyBindings({
    someText: ko.observable("inital value")
});

<input type="text" data-bind="value: someText, customBinding: {some: 'option'}">

valueAccessor() 、要素の値にバインドされているビュー モデル プロパティ (つまり、 observable ) を提供する必要がありsomeTextます。ドキュメントを引用するには:

valueAccessor— このバインディングに関連する現在のモデル プロパティを取得するために呼び出すことができる JavaScript 関数。パラメータを渡さずにこれを呼び出して (つまり、 call valueAccessor())、現在のモデル プロパティ値を取得します。

ただし、実際に行うことはバインディング値を返すことです{some: 'option'}

私は何が欠けていますか?

http://jsfiddle.net/j5y8H/を参照してください

4

2 に答える 2

1

custombinding 呼び出しで、valueAccessor に必要なモデル プロパティを渡す必要があります。あなたの場合、モデル プロパティ 'someText' が必要です。

<input type="text" data-bind="value: someText, customBinding: someText">

http://jsfiddle.net/j5y8H/1/を参照してください

于 2013-03-21T13:06:22.943 に答える
1

少し混乱しています - valueAccessorパラメーターは、バインディングの値へのアクセスを提供します(すでにわかっているように)。

一方、「値」バインディングは、独自のバインディングが適用される要素に存在しないか、まったく有効でない可能性がある別のバインディングです (例: div)。

バインディングにバインドされているプロパティに本当にアクセスしたい場合(そして、その場合はバインディング ハンドラーを再考する必要がある可能性が高い)、次のようにallBindingsAccessorパラメーターを介してアクセスできます。

ko.utils.unwrapObservable(allBindingsAccessor().value);
于 2013-03-21T13:31:20.460 に答える