Digamos que você crie um protótipo interativo com muitas visualizações e estados diferentes. Tem que ser feito agora e você sabe que usará plugins js que devem ser carregados manualmente.
E se você pudesse apenas carregar um arquivo JS e controlar seu comportamento com HTML puro, como aqui:
<select data-use="select2" data-config='{"allowClear":true}'>
// options go here
</select>
ou:
<div data-use="loadView" data-config='{"model":"pages/test.json", "tpl":"tpl/test.tpl"}'>
</div>
ou mesmo:
<input type="email" data-use="placeholderShim" placeholder="Your email">
basicamente:
<ELEMENT data-use="jquery method name" data-config='{"json config parameter":"value"}'>
# and
<ELEMENT data-use="jquery method name" data-config="config parameter or flag">
Observe que o jQuery converterá data-config para o atributo de id do objeto js começa com {}
E você pode criar essa funcionalidade com apenas algumas linhas de código:
$(function(){
function addBehaviour(){
var $me = $(this);
$me[$me.data('use')]($me.data('config'));
}
$('[data-use]').each(addBehaviour);
});
Versão Coffeescript:
$ ->
addBehaviour = ->
$me = $ @
$me[$me.data 'use'] $me.data 'config'
$('[data-use]').each addBehaviour
Ou um doce oneliner:
Desta forma, você não precisa chamar plugins jQuery manualmente toda vez que a página é carregada.
PS. Ao lidar com JSON em parâmetros elemento não se esqueça de colocar os dados em único aparelho como: . Isso é tão importante quanto usar chaves duplas apenas em JSON.<div attribute='value'></div>
PPS.
Eu me deparei com uma abordagem semelhante ao ler os documentos da interface do usuário Angular, mas não há nada que nos pare ao lidar com coisas diferentes (com alguns pequenos ajustes, é claro).
PPPS.
Esta não é uma solução de qualidade de produção. Basicamente, é meio oldschool, se você me perguntar. Se você deseja criar algo que não será usado internamente, use um bom framework mvc .