带有knockoutjs的Jquery ui滑块,如何在视图模型上使用change事件

时间:2013-10-15 13:17:45

标签: jquery jquery-ui knockout.js

使用knockoutj时,如何访问滑块的更改事件。我已为here创建了滑块的自定义绑定     例如,这就是我想要做的事情:

<div data-bind="slider: minMax, sliderOptions: {min: 20, max: 500, range: 'min', step: 50, values: [20 , 50 ]},sliderChange:DoSomethingWithNewValues" />

我希望有像 sliderChange 这样的绑定,只有当滑块更改事件发生时才会发生,并且想要调用viewModel方法DoSomethingWithNewValues。

  function myViewModel() {
        var self = this;
        self.minMax = ko.observable([20, 50]);
        self.DoSomethingWithNewValues = function(){
          //make ajax stuff etc with new values
        }
  }

或者有更好的方法来解决这个问题。我不想像这样使用事件处理

$( ".selector" ).slider({
   change: function( event, ui ) {
     //somehow call myViewModel.DoSomethingWithNewValues ();
     //outside of my view model
   }
});

我已经尝试了

this.minMax.subscribe(function(newminMax) {
   //call myViewModel.DoSomethingWithNewValues ();
  //this causes it to be called several times if you hover without sliding the slider like 
  //there is bug or something          
}

1 个答案:

答案 0 :(得分:1)

如果您的自定义绑定将处理程序附加到slide事件(例如来自您的小提琴),则在用户滑动时将更新可观察的值。一种选择是将自定义绑定更改为仅附加到change事件,然后按照您之前尝试过的方式订阅您的o​​bservable。

否则,如果您甚至可以避免绑定中的额外sliderChange选项,只需将其添加到sliderOptions中:change: myHandler