1

在这个 JsFiddle 中:http: //jsfiddle.net/maxl/mCXND/

(从http://jsfiddle.net/ud3323/XMgwV/复制和修改)

我尝试创建一个基于 JQuery 的 Ember DatePicker。

我遇到的第一个问题是这一行:

var ui = jQuery.ui[this.get('uiType')](options, this.get('element'));

jQuery.ui[this.get('uiType')] 不返回函数,所以我想我开始使用的解决方案适用于一些 jQueryUI 小部件,但不是全部。我想要一个适用于所有 JQuery-UI 小部件的解决方案,尤其是 JQueryUI 的 Datepicker。

谢谢

4

2 回答 2

3

如果您查看 jqueryui 代码,您会看到其中一些作为函数调用,而另一些则没有。您可以使用以下方法解决它:

var ui;
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);
}

工作示例:http: //jsfiddle.net/PzsrT/7/

于 2012-05-03T18:58:52.050 回答
2

关于 jQuery UI 的 datepicker 小部件作为 EmberJS Mixin 的另一件事。如果你想提供一个回调函数来处理 beforeShowDay 事件,你会引发这个错误:

Uncaught TypeError: Cannot read property '0' of undefined

即使您的回调函数(在您的 ember 视图中)返回一个数组,就像它在 jqueryui 文档中指定的那样

  beforeShowDay: function(date){
    some code...
    return [true, ''];
  };

发生这种情况是因为在 _gatherEvents 函数中的 callback.call 之后没有返回任何内容

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

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

      if (callback) {
        // You can register a handler for a jQuery UI event by passing
        // it in along with the creation options. Update the options hash
        // to include any event callbacks.
        options[event] = function(event, ui) { callback.call(self, event, ui); };
      }
    });
  }

我通过在 callback.call 之前添加一个 return 语句来解决这个问题。

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

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

      if (callback) {
        // You can register a handler for a jQuery UI event by passing
        // it in along with the creation options. Update the options hash
        // to include any event callbacks.
        options[event] = function(event, ui) { return callback.call(self, event, ui); };
      }
    });
  }

工作示例http://jsfiddle.net/thibault/qf3Yu/

于 2012-10-03T17:49:18.230 回答