【问题标题】:How to make my plugin options available to all the plugin?如何使我的插件选项可用于所有插件?
【发布时间】:2012-11-11 03:16:55
【问题描述】:



我开始制作插件,但插件内部的变量范围有问题。我希望能够从插件内部的任何地方访问我的选项,但不确定如何,var $opts 仅对该函数可见,而我的公共函数无法访问它。有谁知道我会怎么做?

提前感谢,哦,如果有人注意到我制作插件的方式有任何错误,请毫不犹豫地提及它们:D

//@@@@ Start of myViewport Plugin @@@@\\
(function($) {

  $.fn.myViewport = function(options) {
    var $opts = $.extend({}, $.fn.myViewport.defaults, options);

    //Plugin Here
    return this.each(function() {           

        alert('Initialising Plugin!' + $opts.privateText + $opts.publicText);
        myPrivateFunction();
    });
  };

  // private functions
  function myPrivateFunction($opts) {
        alert($opts.privateText);
  };

  // public functions
  $.fn.myViewport.myPublicFunction = function() {
        alert($opts.publicText);
  };

  // plugin defaults
  $.fn.myViewport.defaults = {
    privateText: 'This is a text from the privateText defaults',
    publicText: 'This is a text from the publicText defaults'
  };

})(jQuery);
//@@@@ End of myViewport Plugin @@@@\\

【问题讨论】:

    标签: jquery jquery-plugins plugins


    【解决方案1】:

    像这样:

    (function($) {
    
      $.fn.myViewport = function(options) {
        var o = $.extend(vp, $.fn.myViewport.defaults, options);
    
        //Plugin Here
        return this.each(function() {           
    
            alert('Initialising Plugin!' + o.privateText + o.publicText);
            myPrivateFunction();
        });
      };
    
      var vp = $.fn.myViewport;
    
      // private functions
      function myPrivateFunction() {
            alert(vp.privateText);
      };
    
      // public functions
      vp.myPublicFunction = function() {
            alert(vp.defaults.publicText);
      };
    
      // plugin defaults
      vp.defaults = {
        privateText: 'This is a text from the privateText defaults',
        publicText: 'This is a text from the publicText defaults'
      };
    
    })(jQuery);
    

    演示here.

    【讨论】:

    • 非常感谢,你能解释一下吗?我不明白你改变了什么,我的 var o = $.extend(vp, $.fn.myViewport.defaults, options);因为我可以只使用 vp。对吗?
    • 如果我这样调用插件: $(document).myViewport({ privateText: 'New Text' });然后它不使用这个新文本。
    • var o$.fn.myViewport 函数中的选项,vp 是这样您不必每次都使用$.fn.myViewport。对我来说没问题:jsfiddle.net/NzBAe/2
    • 如果我在使用公共函数之前声明了新选项,它不会使用新选项,而是使用旧选项。 $(文档).myViewport.myPublicFunction();这不能正常工作,有什么办法解决吗?
    猜你喜欢
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 2015-05-28
    • 1970-01-01
    • 2014-01-14
    • 1970-01-01
    • 2012-12-04
    相关资源
    最近更新 更多