2014-12-22 192 views
0

我使用解釋的問題here製作了一個範圍滑塊,但我對第二個答案的評論之一有同樣的問題:在更新我的綁定值後,它不更新範圍滑塊 這裏是我的代碼:更新範圍滑塊更新綁定

HTML:

<div id="slider-range" style="border: 1px solid #787878;" data-bind="slider: range, sliderOptions: { min: minPrice(), max: maxPrice(), step: 1, range:true }"> 

// flexslider結合處理

ko.bindingHandlers.slider = { 
     init: function (element, valueAccessor, allBindingsAccessor) { 
      var options = allBindingsAccessor().sliderOptions || {}; 
      var observable = valueAccessor(); 

      if (observable().splice) { 
       options.range = true; 
      } 

      options.slide = function (e, ui) { 
       observable(ui.values ? ui.values : ui.value); 
      }; 

      ko.utils.domNodeDisposal.addDisposeCallback(element, function() { 
       $(element).slider("destroy"); 
      }); 

      ko.utils.registerEventHandler(element, "slide", function (event, ui) { 
       observable(ui.values ? ui.values : ui.value); 
      }); 

      $(element).slider(options); 
     }, 
     update: function (element, valueAccessor) { 
      var value = ko.utils.unwrapObservable(valueAccessor()); 
      if (value instanceof Array) { 
       var value1 = ko.utils.unwrapObservable(value[0]); 
       var value2 = ko.utils.unwrapObservable(value[1]); 
       if (value1) { 
        value = [value1, value2]; 
       } 
       else value = 0; 
      } 
      else if (isNaN(value)) value = 0; 
      $(element).slider(value.slice ? "values" : "value", value); 
      // $(element).slider(value.slice ? "values" : "value", value); 
     } 
    }; 

我的視圖模型:

function viewmodel() { 
self.minPrice = ko.observable(0); 
     self.maxPrice = ko.observable(2000); 
self.range= ko.observableArray([self.minPrice(), self.maxPrice()]); 
}; 

當我申請一個$ Ajax請求,我重裝我的數據有這樣的功能:

self.loadDataFromServer = function (data) { 

      self.minPrice(data.minPrice); 
      self.maxPrice(data.maxPrice); 
      self.range([self.minPrice(), self.maxPrice()]); 

     } 

但網頁不更新range.I「會apretiate一些幫助。

回答

0

我找到了答案的另一個問題here

變化與此更新部分:

update: function (element, valueAccessor, allBindingsAccessor) { 
      var value = ko.utils.unwrapObservable(valueAccessor()); 
      $(element).slider(value.slice ? "values" : "value", value); 
      $(element).slider("option", allBindingsAccessor().sliderOptions) 
     } 

一個更新過的例子here