0

値バインディングをよりよく理解しようとしている単純なjsfiddleがあります。次のように、viewModelの検索プロパティにバインドされた入力コントロール値があります。

<input data-bind="value: search" />

次のように定義された検索プロパティがあります。

this.search = ko.observable("");

また、次のように「検索」プロパティにサブスクライブを実装しました。

this.search.subscribe(function(newValue) {
    alert("New value is " + newValue);
    alert("New value is" + this.search);
});

入力してから別のコントロールを選択すると、 newValueの変化を確認できますが、viewModel プロパティの検索は常にundefinedです。双方向バインディングでは、入力情報検索にタイプ値が含まれるため、ajaxを使用してWebサービス呼び出しを実行するボタンで使用できると予想していましたが、フィールドで取得できる値は未定義のみです検索のデフォルト値を設定せずに。

subscribe 呼び出しでsearchの値を変更することは想定されていますか? これは、2 方向にバインドすることで実現できると思いました。

4

1 に答える 1

2

まず、subscribeメソッド内でthisはビューモデルを参照しないため、search使用可能なプロパティはありません (したがってundefined)。これを回避するには、ビュー モデルへの参照を などの別の変数名で保存し、その参照を使用して_selfアクセスsearchします。

次に、その値を取得するために関数として呼び出す必要がありますsearch。これは、Knockout を使用する場合、すべての観測可能な値に当てはまります。

var viewModel = function() {
    var _self = this;
    this.search = ko.observable("");

    this.search.subscribe(function(newValue) {
        alert("New value is " + newValue);
        alert("New value is " + _self.search());
    });
};

更新されたフィドル

于 2012-04-20T14:24:08.120 に答える