Latest web development tutorials

Como usar jQuery UI biblioteca de widgets

Vamos criar uma barra de progresso. Tal como mostrado nos exemplos seguintes, os quais ligando jQuery.widget() para completar, leva-se dois parâmetros: um plug-in nome é para ser criada, um texto que contém o objecto é uma função do plug-in de suporte. Quando a ficha é chamado, ele cria uma nova instância de plug-in, todas as funções serão executadas no contexto deste exemplo. Esta duas maneiras importantes diferente padrão plugin jQuery. Em primeiro lugar, o contexto é um objeto, não um elemento DOM. Em segundo lugar, o contexto é sempre um único objeto, não uma coleção.

$.widget( "custom.progressbar", {
    _create: function() {
        var progress = this.options.value + "%";
        this.element
            .addClass( "progressbar" )
            .text( progress );
    }
});

Deve conter o nome do namespace plugin, neste exemplo, usamos uma custom namespace. Você só pode criar uma camada namespace profunda, portanto, custom.progressbar é um plug-in efetivo nome, very.custom.progressbar não um plug-in nome válido.

Vimos biblioteca de peças (Widget Factory) nos fornece duas propriedades. this.element é um objeto jQuery contendo um elemento. Se chamarmos o objeto plug-in jQuery que contém vários elementos, ele irá criar uma instância de plug-in separado para cada elemento, e cada instância terá o seu próprio this.element . A segunda propriedade, this.options , é uma opções de plug-in incluem todos os pares nome / valor-chave de hash (Hash). Estas opções podem ser passados ​​para o plug-in, como segue:

$( "<div></div>" )
    .appendTo( "body" )
    .progressbar({ value: 20 });

Quando chamamos jQuery.widget() , que, dando jQuery.fn (usado para criar um sistema plug-in padrão) adicionar a função de estender jQuery. Nome da função é adicionado com base no seu passe jQuery.widget() nome sem o namespace - "progresso". opção-pass ficha é obter o valor definido na instância do plugin. Como mostrado no exemplo a seguir, podemos especificar um valor padrão para qualquer opção. Ao projetar sua API, você deve estar ciente do uso mais comum do seu plug-in, para que possa definir o padrão adequado, e garantir que todas as opções verdadeiramente opcionais.

$.widget( "custom.progressbar", {
 
    // Default options.
    options: {
        value: 0
    },
    _create: function() {
        var progress = this.options.value + "%";
        this.element
            .addClass( "progressbar" )
            .text( progress );
    }
});

Chamar os métodos de plug-in

Agora podemos iniciar a nossa barra de progresso, vamos realizar uma ação, chamando o método na instância do plug-in. Para definir um método plug-in, nós só passamos jQuery.widget() referência a um objeto de função. Também pode definir o método "privado" para o nome da função com um prefixo sublinhado.

$.widget( "custom.progressbar", {
 
    options: {
        value: 0
    },
 
    _create: function() {
        var progress = this.options.value + "%";
        this.element
            .addClass( "progressbar" )
            .text( progress );
    },
 
    // Create a public method.
    value: function( value ) {
 
        // No value passed, act as a getter.
        if ( value === undefined ) {
            return this.options.value;
        }
 
        // Value passed, act as a setter.
        this.options.value = this._constrain( value );
        var progress = this.options.value + "%";
        this.element.text( progress );
    },
 
    // Create a private method.
    _constrain: function( value ) {
        if ( value > 100 ) {
            value = 100;
        }
        if ( value < 0 ) {
            value = 0;
        }
        return value;
    }
});

Para chamar um método em uma instância de plug-in, você pode passar o nome do método para o plugin jQuery. Se você chamar um método para aceitar parâmetros, você simplesmente passar o nome do método por trás desses parâmetros.

Nota: A função jQuery é passado para o mesmo nome de método utilizado para inicializar o plug-in para executar o método. Isso é feito para evitar a poluição namespace jQuery, mantendo as chamadas de método corrente. Nos capítulos seguintes, veremos outros usos olhar mais natural.

var bar = $( "<div></div>" )
    .appendTo( "body" )
    .progressbar({ value: 20 });
 
// Get the current value.
alert( bar.progressbar( "value" ) );
 
// Update the value.
bar.progressbar( "value", 50 );
 
// Get the current value again.
alert( bar.progressbar( "value" ) );

Use as opções

option() método é fornecida automaticamente para o plug-in. option() método permite-lhe obter e definir opções após a inicialização. O método do jQuery .css() e .attr() método: Você só pode passar um nome como o argumento é usar, você também pode passar um nome e um valor definido utilizando ou passar um par de chaves de nome / valor de hash para definir vários valores. Quando usado como um valor, um plug-in retorna o nome da opção de entrada de valor de corrente correspondente. Quando usado como um setter, widget _setOption método será chamado para cada opção é definida. Podemos especificar um plug-in no nosso _setOption método para refletir a alteração de opções. Alterar as opções de ação a ser executada de forma independente, podemos substituir _setOptions .

$.widget( "custom.progressbar", {
    options: {
        value: 0
    },
    _create: function() {
        this.options.value = this._constrain(this.options.value);
        this.element.addClass( "progressbar" );
        this.refresh();
    },
    _setOption: function( key, value ) {
        if ( key === "value" ) {
            value = this._constrain( value );
        }
        this._super( key, value );
    },
    _setOptions: function( options ) {
        this._super( options );
        this.refresh();
    },
    refresh: function() {
        var progress = this.options.value + "%";
        this.element.text( progress );
    },
    _constrain: function( value ) {
        if ( value > 100 ) {
            value = 100;
        }
        if ( value < 0 ) {
            value = 0;
        }
        return value;
    }
});

Adicionar callback

A extensão mais simples é adicionar um retorno de chamada para que os usuários possam reagir quando ocorrem mudanças no estado plug-in. Podemos olhar para exemplo de como adicionar uma chamada de retorno para a barra de progresso quando a barra de progresso atingir 100 por cento o seguinte. _trigger() método leva três argumentos: o nome do callback, um jQuery evento de retorno de chamada começou a objetos, e um hash dos dados associados ao evento. Nome de retorno de chamada é o único parâmetro obrigatório, mas deseja implementar costume caracteriza os usuários em plug-in, os outros parâmetros são muito úteis. Por exemplo, se nós criamos um plugin arrastável, nós podemos passar evento de arrastar mousemove quando acionado o retorno de chamada, o que permitirá que os usuários responder ao evento com base no objeto fornecido pelos X / Y coordenadas do arrasto. Por favor, note passado para _trigger() do evento original deve ser um evento jQuery em vez de um eventos navegador nativo.

$.widget( "custom.progressbar", {
    options: {
        value: 0
    },
    _create: function() {
        this.options.value = this._constrain(this.options.value);
        this.element.addClass( "progressbar" );
        this.refresh();
    },
    _setOption: function( key, value ) {
        if ( key === "value" ) {
            value = this._constrain( value );
        }
        this._super( key, value );
    },
    _setOptions: function( options ) {
        this._super( options );
        this.refresh();
    },
    refresh: function() {
        var progress = this.options.value + "%";
        this.element.text( progress );
        if ( this.options.value == 100 ) {
            this._trigger( "complete", null, { value: 100 } );
        }
    },
    _constrain: function( value ) {
        if ( value > 100 ) {
            value = 100;
        }
        if ( value < 0 ) {
            value = 0;
        }
        return value;
    }
});

função de retorno essencialmente apenas uma opção adicional, para que possa obter o mesmo que as outras opções e configurá-los. Sempre que retorno de chamada, haverá um evento correspondente é acionado. tipo de evento é pelo nome e o nome da função de retorno para determinar a ficha de ligação. Callback eo evento aceitam os mesmos dois argumentos: um objeto de evento e um hash dos dados associados ao evento, em especial, como mostrado nos exemplos a seguir. Você pode necessitar de incluir um plug-in recursos para impedir que os usuários, a fim de fazer isso, a melhor maneira é criar amor que você pode revogar retornos de chamada. Os usuários podem revogar callback ou um evento relacionado a um nativo revogar qualquer evento com eles, eles são chamando event.preventDefault() ou retornar false para conseguir. Se você revogar callback, _trigger() método irá retornar false , para que possa alcançar a função apropriada no plug-ins.

var bar = $( "<div></div>" )
    .appendTo( "body" )
    .progressbar({
        complete: function( event, data ) {
            alert( "Callbacks are great!" );
        }
    })
    .bind( "progressbarcomplete", function( event, data ) {
        alert( "Events bubble and support many handlers for extreme flexibility." );
        alert( "The progress bar value is " + data.value );
    });
 
bar.progressbar( "option", "value", 100 );

natureza

Agora vimos como usar a biblioteca de widget (Widget Factory) para criar um plug-in, vamos ver como ele realmente funciona. Quando você chamar jQuery.widget() , cria-se uma função de construtor para o plug-in e definir a sua instância do plugin é passado como um objeto de protótipo. Todas as funções são automaticamente adicionados ao widget vem de um widget base um protótipo, definida como jQuery.Widget.prototype . Quando você cria uma instância será usada em-plug jQuery.data armazena no elemento DOM original, plug-in nome como o nome da chave.

Uma vez que a instância do plugin diretamente ligada ao elemento DOM, você pode acessar diretamente o plug-in exemplo, sem a necessidade de percorrer os métodos de plug-in. Este método permitirá que você chamar diretamente na instância do plug-in, sem a necessidade de passar um nome de método de corda, e você também pode acessar as propriedades ligar diretamente.

var bar = $( "<div></div>" )
    .appendTo( "body" )
    .progressbar()
    .data( "progressbar" );
 
// Call a method directly on the plugin instance.
bar.option( "value", 50 );
 
// Access properties on the plugin instance.
alert( bar.options.value );

Você também pode criar uma instância do plug-in, sem métodos de passagem, e a opção de chamar os elementos do construtor diretamente:

var bar = $.custom.progressbar( {}, $( "<div></div>" ).appendTo( "body") );
 
// Same result as before.
alert( bar.options.value );

Extensão do protótipo

construtores widget e protótipos maior vantagem é extensões fáceis. Ao adicionar ou modificar o protótipo plugue método, podemos modificar o comportamento Widget de todas as instâncias. Por exemplo, se queremos adicionar um método para a barra de progresso para repor para 0% o progresso, podemos adicionar este método para o protótipo, que será chamado em todas as instâncias plug-in.

$.custom.progressbar.prototype.reset = function() {
    this._setOption( "value", 0 );
};

Para widgets estendidos para mais detalhes e como criar um novo widget em um já existente Widget mais detalhes, consulte o Widget estendida (Widget) por bibliotecas membros (do Widget Factory) .

aclarar

Em alguns casos, o aplicativo permite que o usuário plug-ins, e em seguida, cancelar o pedido. Você pode _destroy() para fazer este método. Em _destroy() dentro de um método, você deve revogar toda a ação durante a inicialização e pós-uso de plug-ins fazer. _destroy() por .destroy() método é chamado, .destroy() método é um plug-in casos em que a remoção de um elemento a partir dos vínculos DOM chamados automaticamente, assim que pode ser usado para coleta de lixo. Básico .destroy() método também é comumente usado para lidar com algumas operações de limpeza, tais como a remoção do elemento DOM a partir da instância do widget citados, namespace Widget unbind todos os eventos a partir dos elementos, usar unbind todos _bind() adicionar eventos.

$.widget( "custom.progressbar", {
    options: {
        value: 0
    },
    _create: function() {
        this.options.value = this._constrain(this.options.value);
        this.element.addClass( "progressbar" );
        this.refresh();
    },
    _setOption: function( key, value ) {
        if ( key === "value" ) {
            value = this._constrain( value );
        }
        this._super( key, value );
    },
    _setOptions: function( options ) {
        this._super( options );
        this.refresh();
    },
    refresh: function() {
        var progress = this.options.value + "%";
        this.element.text( progress );
        if ( this.options.value == 100 ) {
            this._trigger( "complete", null, { value: 100 } );
        }
    },
    _constrain: function( value ) {
        if ( value > 100 ) {
            value = 100;
        }
        if ( value < 0 ) {
            value = 0;
        }
        return value;
    },
    _destroy: function() {
        this.element
            .removeClass( "progressbar" )
            .text( "" );
    }
});

Fechar notas

Biblioteca de Componentes (Widget Factory) é uma maneira de criar um estado para o plug. Existem outros modelos diferentes podem ser utilizados, e cada um tem suas próprias vantagens e desvantagens. Biblioteca de Componentes (Widget Factory) resolve muitos problemas comuns, e melhora a eficiência, mas também aumentar consideravelmente a capacidade de reutilização do código, tornando-o adequado para jQuery UI e outro estado dos plug-ins.

Note-se que nesta seção, usamos o custom namespace. ui namespace é reservado plug-in oficial jQuery UI. Ao criar seus próprios plug-ins, você deve criar seu próprio namespace. Assim como a forma mais clara a partir de onde a ficha, que pertence à gama.