2

私は Knockout を初めて使用し、監視可能なパターン ライブラリを以前に使用したことがありますが、関数を設定して ViewModel の値を監視し、その値が変更されたときにトリガーする方法がわかりません。

状況は次のとおりです。ドロップダウンの値が「その他」の場合にモーダル ポップアップを有効にしたいと考えています。私は Twitter ブートストラップの「ドロップダウン」(実際にはアンカーのリスト) を使用しており、各アンカーにはclickと呼ばれる ViewModel の関数へのバインディングがありますsetDetailsetDetailと呼ばれる監視可能なプロパティの値を設定しますproblem

problem私の考えは、ロジックを分離しておくために、値を観察する関数を配置することです。これを行う方法はありますか、それともコードをsetDetail関数に入れる必要がありますか?

どんな助けでも大歓迎です!

4

2 に答える 2

7

はい、オブザーバブルを明示的にサブスクライブできます。

ドキュメントはこちらから入手できます。明示的にオブザーバブルにサブスクライブするを検索してください。

あなたは次のようなことをしているでしょう:

function ViewModel() {
  this.problem = ko.observable();
  this.problem.subscribe(function(newValue) {
    if (newValue === 'other') {
      // trigger modal
    }
  });
}
于 2012-06-11T09:58:14.760 に答える
1

HTMLを考えると、ここに方法があります

<div> 
    <select data-bind="options: dropdownOptions, selectedOptions: problem" ></select>        
</div>

</p>

そしてJavaScript..

var ViewModel = function() {
    var self = this;
    this.problem = ko.observable();
    this.dropdownOptions = ko.observableArray(["1","2","3","other"]);                        

    this.problem.subscribe((function(selectedOption) {
        if(selectedOption == "other") {
            alert(self.problem());            
        }
    }));
}

ko.applyBindings(new ViewModel());
​

またはフィドル: http://jsfiddle.net/keith_nicholas/pb5ja/2/

于 2012-06-11T10:11:51.973 に答える