1

我有一个关于淘汰赛绑定到选择列表的问题。问题是,如果我们将点击绑定附加到控件,则只要点击该控件,就会执行该事件。但是为什么在控件加载到 DOM 时会触发此选择更改事件。我最近三周都在使用淘汰赛。这是小提琴。 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 回答