0

私は現在jQueryUIWidget 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);

Factoryのプライベートメソッドは疑似プライベートであり、。を使用して直接アクセスできることを理解しています.date()._privateMethod()。ご覧のとおり_setOption()、オプションの変更に対応するために利用しています。

私の例ではmax、ユーザーに直接公開したくない(つまり、ユーザーがを使用して変更したくない.myWidget('option', 'max', value).myWidget({max: value})、同時に公開したいmin

要約すると:

  • ユーザーが任意のオプションでウィジェットを初期化(インスタンス化)できるようにしたいと思います(ウィジェットはすでに実装され、機能しています)。
  • 初期化後にパブリックAPIを使用してユーザーが変更できないようにします(つまり、ウィジェットを使用して、またはウィジェットを使用してインスタンスに直接アクセスすることでユーザーが変更しても問題ありません。maxmax.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 に答える