1

Emberjs 中的 jQuery datepicker 仍然存在问题。这是我的代码

如果我使用 datepicker 离开页面,控制台会给我错误: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); };
         }
     });
 }
});

Ember 调用 willDestroyElement 函数,但“ui._destroy() 不是函数”为什么?此代码适用于外部 jQuery 元素(自动完成,按钮 ...)

4

1 回答 1

0

我已经成功进行了以下更改:

代替:

ui._destroy();

和:

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

如果您想支持更多没有 _destroy() 的 UI 控件,您可能需要添加更多代码。

于 2013-10-31T16:07:12.553 回答