2013-09-01 2 views
1

У меня все еще есть проблема с jQuery datepicker в Emberjs. Это мой codeDatePicker: ui.destroy не является функцией

Если я уйду со страницы с помощью своего дампикера, консоль дала мне ошибку: ui.destroy не является функцией.

JQ.Widget = Em.Mixin.create({ 

didInsertElement: function() { 
    "use strict"; 
    var options = this._gatherOptions(), ui; 
    this._gatherEvents(options); 

    if (typeof jQuery.ui[this.get('uiType')] === 'function') { 
     ui = jQuery.ui[this.get('uiType')](options, this.get('element')); 
    } else { 
     ui = this.$()[this.get('uiType')](options); 
    } 

    this.set('ui', ui); 
}, 

willDestroyElement: function() { 
    "use strict"; 
    var ui = this.get('ui'), observers, prop; 

    if (ui) { 
     observers = this._observers; 
     for (prop in observers) { 
      if (observers.hasOwnProperty(prop)) { 
       this.removeObserver(prop, observers[prop]); 
      } 
     } 
     ui._destroy(); 
    } 
}, 

_gatherOptions: function() { 
    "use strict"; 
    var uiOptions = this.get('uiOptions'), options = {}; 

    uiOptions.forEach(function (key) { 
     options[key] = this.get(key); 

     var observer = function() { 
      var value = this.get(key); 
      this.get('ui')._setOption(key, value); 
     }; 

     this.addObserver(key, observer); 

     this._observers = this._observers || {}; 
     this._observers[key] = observer; 
    }, this); 

    return options; 
}, 

_gatherEvents: function (options) { 
    "use strict"; 
    var uiEvents = this.get('uiEvents') || [], self = this; 

    uiEvents.forEach(function (event) { 
     var callback = self[event]; 

     if (callback) { 
      options[event] = function (event, ui) { callback.call(self, event, ui); }; 
     } 
    }); 
} 
}); 

Эмбер вызывает функцию willDestroyElement, но "ui._destroy() не является функцией" Почему? Этот код прекрасно работает с элементами JQuery наружные видные (автозаполнения, кнопки ...)

ответ

0

я имел успех со следующими изменениями:

Заменить:

ui._destroy(); 

С:

if (ui._destroy) ui._destroy(); 
else if (ui.datepicker) ui.datepicker('destroy'); 

Возможно, вам придется добавить дополнительный код, если вы хотите поддерживать больше элементов управления пользовательского интерфейса, которые не имеют _destroy().