0

我目前正在使用 jQuery UI Widget Factory,不幸的是它的文档很差

这是一个基本的小部件(用于测试的jsfiddle

(function($) {
    $.widget('ns.myWidget', {
        options: {
            min: 0,
            max: 100
        },
        _create: function() {
            console.log(this.options.min+', '+this.options.max);
        },
        _setOption: function(key, value) {
            switch(key) {
                case 'min':
                    console.log('min is now '+value);
                    break;
            }
            $.Widget.prototype._setOption.apply(this,arguments)
        },
        destroy: function() {
            $.Widget.prototype.destroy.call(this);
        }
    });
})(jQuery);

我知道工厂的私有方法是伪私有的,它们仍然可以直接使用.date()._privateMethod(). 如您所见,我正在利用_setOption()来响应选项更改。

在我的示例中,我不希望max直接向用户公开(这意味着我不希望用户使用.myWidget('option', 'max', value)或更改它,.myWidget({max: value})但同时我想公开min.

所以总结一下:

  • 我希望用户能够使用他们想要的任何选项来初始化(实例化)小部件(它已经实现并且正在工作)。
  • 希望用户能够max在初始化后使用公共 API 进行更改(这意味着如果用户max通过直接使用.data或使用小部件的.prototype.

我怎样才能做到这一点?

4

1 回答 1

0

经过几个小时的挠头,我找到了它!在我的压倒一切_setOption中,我只需要忽略max.

_setOption: function (key, value) {
   switch (key) {
   case 'min':
      console.log('min is now ' + value);
      break;
   case 'max':
      return; //*
   }
   $.Widget.prototype._setOption.apply(this, arguments)
}

* 退出此处将阻止调用$.Widget.prototype._setOption,因此不会更新选项。

于 2012-08-21T08:34:18.387 回答