从插件外部设置/引用插件变量

时间:2012-01-02 15:58:33

标签: javascript jquery variables plugins

我有一个使用如下变量的插件:

(function( $, window) { 

$.widget("mobile.multiview",$.mobile.widget, {

         // variables
         vars: {
            $ignoreMyOwnNextHashChange : false
            }
        }); 
   ...  
   }) (jQuery,this);

我想从外部设置 $ ignoreMyOwnNextHashChange =另一个插件位于此之后。这可能吗?这样做是行不通的:

  $.mobile.multiview.vars.$ignoreMyOwnNextHashChange = true;

1 个答案:

答案 0 :(得分:1)

这里有两个不错的选择:

  1. 使用窗口小部件类中的默认options对象。所有小部件都有options属性,并且围绕它构建了许多其他功能。使用options将允许您为每个选项属性编写getter和setter:

    $("#selector").multiview("option", "$ignoreMyOwnNextHashChange"); // getter
    $("#selector").multiview("option", "$ignoreMyOwnNextHashChange", true); // setter
    

    如果你走这条路,你实际上最终会在你的小部件中减少代码:

    (function($, window) {
    
            $.widget("mobile.multiview", {
    
            // variables
            options: {
                $ignoreMyOwnNextHashChange: false
            }
        });
    })(jQuery, this);
    

    如果您的属性可以在初始化时设置,然后检索或稍后设置,这可能是您的最佳选择。所有jQueryUI小部件都遵循这种模式。

  2. 您的第二个选择是创建一个可以调用的属性特定方法。如果您在初始化时在内部设置变量,然后允许用户获取或设置变量,那么这非常有用:

    (function($, window) {
    
        $.widget("mobile.multiview", {
            vars: {
                $ignoreMyOwnNextHashChange: false
            },
    
            ignoreMyOwnNextHashChange: function (newValue) {
                if (arguments.length) {
                    this.vars.$ignoreMyOwnNextHashChange = newValue;
                }
    
                return this.vars.$ignoreMyOwnNextHashChange;
            }
        });
    })(jQuery, this);
    

    现在,在实例化窗口小部件后,您可以像这样调用该函数:

    $("#selector").multiview("ignoreMyOwnNextHashChange"); // getter
    $("#selector").multiview("ignoreMyOwnNextHashChange", true); // setter.
    
  3. 针对小工具工厂编写插件的提示的一些很好的资源是jQueryUI's dev guide on the widget factoryjQueryUI source itself