Como implementar corretamente o método de opção / atualização no plugin jquery?
Eu estou tentando criar um plugin com capacidade de atualizar as opções após a inicialização. Eu comecei com um plugin simples, o que me ajudará a entender a lógica do plugin. Então aqui está:
;(function($) {
var defaults = {
message: 'This is default message'
};
var options = {};
var methods = {
init : function( options ) {
options = $.extend(defaults, options);
return this.each(function() {
$(this).click(function(){
alert(options.message);
});
});
},
option: function( key, value ){
if (val) {
options[key] = val;
} else {
return options[key];
}
}
};
$.fn.clickAlert = function( method ) {
if ( methods[method] ) {
return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
} else if ( typeof method === 'object' || ! method ) {
return methods.init.apply( this, arguments );
} else {
//some error that method doesnt exist
}
};
})(jQuery);
Como você pode ver, este plugin apenas mostra a mensagem de alerta com texto definido. Além disso, tenho página HTML (onde incluo biblioteca jquery e este plugin) com 2 links:
<a href="#" class="show">SHOW ALERT</a>
<a href="#" class="change">CHANGE ALERT MESSAGE</a>
Eu crio uma instância do plugin 'clickAlert' no link com a classe "show". Quando clico nele, ele mostra a mensagem padrão como eu esperava. Mas eu quero (por exemplo) clicar no link com a classe "change" e atualizar o atributo 'message' da instância criada anteriormente. MAS ALGO ESTÁ ERRADO. Meu código jquery na página HTML:
<script type="text/javascript">
jQuery(document).ready(function($) {
$('.show').clickAlert();
$('.change').click(function(){
$('.show').clickAlert('option', 'message', 'Updated message');
});
});
</script>
1) Como implementar corretamente a opção / método de atualização neste plugin jquery?
2) Eu tenho mais uma pergunta, mas não está relacionada à questão principal. Por exemplo, vou criar plugins usando esse padrão. Além dos métodos init e option, o plugin terá mais 10 métodos (por exemplo) responsáveis pela animação. No meu método init, eu preciso verificar (usando a instrução SWITCH) qual método de animação devo chamar e chamá-lo. Como preciso fazer essa ação mais de uma vez, é melhor criar uma função para evitar a publicação de código. Onde é o melhor lugar para criar uma função como esta? Devo criá-lo como um novo método (como init, opção e outros métodos de animação) ou posso simplesmente criá-lo na função "return this.each ()" do init e também chamá-lo algumas vezes lá?