Установить / ссылаться на переменную плагина снаружи плагина - PullRequest
1 голос
/ 02 января 2012

У меня есть плагин, который использует переменные следующим образом:

(function( $, window) { 

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

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

Я хочу установить $ ignoreMyOwnNextHashChange снаружи = другой плагин, сидящий после этого.Это возможно?Делать это так не получится:

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

1 Ответ

1 голос
/ 02 января 2012

У вас есть два хороших варианта:

  1. Используйте объект по умолчанию options внутри класса виджета. Все виджеты имеют свойство options со множеством других функциональных возможностей, построенных вокруг него. Использование options позволит вам писать методы получения и установки для каждого свойства параметров:

    $("#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 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...