1

選択リストへのノックアウト バインディングについて質問があります。問題は、クリック バインディングをコントロールにアタッチすると、コントロールがクリックされるたびにイベントが実行されることです。しかし、コントロールが DOM にロードされている間に、この選択変更イベントが発生するのはなぜですか。過去3週間ノックアウトを使用しています。これはそのためのフィドルです。 http://jsfiddle.net/aroor/dUvRx/4/

 <select data-bind='options :list, optionsText: "name", value:selectedItem , event : { change : onSelectChange }'></select>

  var model = function(){
  var self = this;

  self.name = ko.observable();
  self.key = ko.observable();

  self.visible = ko.observable();

  self.selectedItem = ko.observable();

 self.onSelectChange = function(data,event){
    var currentSelection = self.selectedItem();
    if(currentSelection.visible  )
     {
      // display the content according to the selection
     }
  }
 };

 ko.applyBindings(new model());

この問題を整理するのを手伝ってください。

optionsCaption を使用してデフォルト項目を選択したくありません。コレクションは ajax 呼び出しから来ているためです。

4

1 に答える 1

1

メソッドonSelectChangeは、選択ボックスの値に基づいています。したがって、データ バインディングの結果として値が変更された場合 (アイテムが最初にリストに追加された場合など)、このイベントが発生するのは正しいことです。

選択ボックスに基づいて変更イベントを作成するのではなく、データ バインドされたプロパティに基づいて変更イベントを作成する方がよい場合があります。

まず、リストを観察可能な配列に変更できます。

list = ko.observableArray([{ name : "test-01", key : 1, visible: true},
   { name : "test-02", key : 2 , visible: false},
   { name : "test-03", key : 3 , visible: false},
   { name : "test-04", key : 4 , visible: true}
]);

selectedItem = ko.observable();

マークアップで:

<select data-bind='options :list, optionsText: "name", value:selectedItem'></select>

これで、アイテムが変更されたかどうかを判断したいときはいつでも、ko.subscribe関数を使用できます。

selectedItem.subscribe(function(newValue) { /* Do stuff when the value changes here */ });
于 2013-05-16T12:07:04.840 に答える