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

Set/reference a plugin variable from outside the plugin

本文关键字:插件 引用 变量 设置 外部      更新时间:2023-09-26

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

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

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

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

这里有两个很好的选择:

  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.
    

关于编写针对小部件工厂的插件的技巧的一些很好的资源是jQueryUI的小部件工厂开发指南和jQueryUI源代码本身。