在willDestroyElement回调中销毁滑块实例的正确方法

时间:2015-08-27 12:25:18

标签: jquery ember.js

在Ember组件中,我实例化一个滑块(https://github.com/seiyria/bootstrap-slider)并尝试在组件被销毁时将其清理干净。我的设置和拆卸功能是:

didInsertElement: function() {
  let component = this;
  let elem = component.$().find('.slider')[0];

  let slider = Ember.$(elem).slider({
    ticks: [0, 20, 40, 60, 80, 100],
    ticks_labels: ['0','20','40','60','80','100'],
    ticks_snap_bounds: 5,
    range: true
  });
  let min = parseInt(component.get('min')),
      max = parseInt(component.get('max'));

  slider.slider('setValue', [ min, max ], true, false);

  slider.on('change', function(evt) {
    component.set('last', evt.value.newValue);
    Ember.run.debounce(component, component.sendScores, 200);
  });

  component.set('slider', slider);
},

willDestroyElement: function() {
  console.log(this);
  console.log(this.get('slider'));
  this.get('slider').destroy();
}

问题在于,我发现了Uncaught TypeError: this.get(...).destroy is not a function例外情况。

具体问题:我在这里做错了什么,因此destroy()方法不可用。

一般问题是:我应该存储一个"句柄"我的滑块实例作为Ember属性并像这样检索它还是有更好的方法?

1 个答案:

答案 0 :(得分:3)

这是滑块库的误用。销毁该库实例的正确方法是:

willDestroyElement: function() {
  this.get('slider').slider('destroy');
  # NOT: this.get('slider').destroy();
}