敲除 noUiSlider 自定义绑定流畅度

Knockout noUiSlider custom binding fluency

我使用 knockout 将 noUiSlider 与输入 valueMax 和 valueMin 绑定。更改滑块后更新输入,但这不能流畅地工作。我想直接在输入中看到滑块的值。

我有密码

HTML

<div class="col-xs-12">
  <div class="row">
    <div class="slider" data-bind="noUiSliderPrice: {minValue: min, maxValue: max}">
    </div>
  </div>
  <div class="row">
    <div class="pull-left">
      <input data-bind="textInput: min" />
    </div>
    <div class="pull-right">
      <input  data-bind="textInput:  max" />
    </div>
  </div>
</div>

JS

ko.bindingHandlers.noUiSliderPrice = {
  init: function(element, valueAccessor, allBindingsAccesor, viewModel, bindingContext) {
    var params = valueAccessor();
    noUiSlider.create(element, {
      start: [1, 10000000],
      range: {
        'min': 1,
        'max': 1000000
      },
      connect: true,
      step: 1,
    });
    element.noUiSlider.on('slide', function(values, handle) {
      var value = values[handle];
      if (handle) {
        params.maxValue(value);

      } else {
        params.minValue(value);
      }
    });
  },
  update: function(element, valueAccessor, allBindingsAccesor, viewModel, bindingContext) {
    var params = valueAccessor();
    var range = [params.minValue(), params.maxValue()];
    element.noUiSlider.set(range);
  }
};
var model = function() {
  var self = this;

  self.min = ko.observable().extend({
    throttle: 100
  });
  //with extend input has latency
  self.max = ko.observable();
  //without extend input don't work fluently
};

ko.applyBindings(new model());

fiddle

所以自定义绑定的更新方法很重ui。在 init 中直接使用模型(var model = viewModel;)而不是 valueAccessor 处理更新将改善您遇到的 ui 输入延迟。