2010-08-28 13 views
2

J'utilise le plugin DataTables jQuery. La façon dont je veux que mes tables de travail signifie que je passe beaucoup de paramètres au plugin pour désactiver les choses:Comment raccourcir ces paramètres de plugin jQuery répétés?

$('table.data').dataTable({ 
    'aoColumns': [ 
     null, 
     { 'bSortable': false }, 
     { 'bSortable': false }, 
     { 'asSorting': ['desc','asc'], 'sType': 'blanks' }, 
     { 'asSorting': ['desc','asc'] } 
    ], 
    'bPaginate': false, 
    'bAutoWidth': false, 
    'bInfo': false, 
    'bProcessing': true, 
    'asStripClasses': [], 
    'sDom': 'rt' 
}); 

sur plusieurs pages différentes, le paramètre aoColumns change en fonction de la table, mais les autres paramètres rester le même. Quel serait le meilleur moyen de me sauver répétant le code encore et encore (et le rendre plus facile si je change d'avis sur un paramètre plus tard)?

J'ai essayé de stocker un paramètre avec {'bPaginate': false ...} mais cela crée un sous-objet. Peut-être qu'il existe un moyen de "fusionner" des objets en ligne ou quelque chose?

Répondre

2

Si vous le faites souvent, vous pouvez ajouter votre propre jQuery plugin:

jQuery.fn.myDataTable = function(aoColumns) { 
    return this.dataTable({ 
     'aoColumns': aoColumns, 
     'bPaginate': false, 
     'bAutoWidth': false, 
     'bInfo': false, 
     'bProcessing': true, 
     'asStripClasses': [], 
     'sDom': 'rt' 
    }); 
}; 
2

Placez les ceux réutilisés dans une variable:

var reused = { 
    'bPaginate': false,'bAutoWidth': false, 
    'bInfo': false, 
    'bProcessing': true, 
    'asStripClasses': [], 
    'sDom': 'rt' 
} 

Utilisez ensuite $.extend pour fusionner les données uniques:

$('table.data').dataTable( 
    $.extend(
     {}, // Empty target that is extended and passed to dataTable 
     reused, // Extend with the stored reused data 
     {'aoColumns': [ // Extend with an object containing the unique propertie(s) 
       null, 
       { 'bSortable': false }, 
       { 'bSortable': false }, 
       { 'asSorting': ['desc','asc'], 'sType': 'blanks' }, 
       { 'asSorting': ['desc','asc'] } 
      ] 
     } 
    ) 
); 

EDIT: Un de mes ferme était } au lieu de ). Fixé.

Notez que si vous souhaitez remplacer l'une de vos propriétés reused, vous pouvez simplement ajouter un autre objet au $.extend() n'importe où après la variable reused. Cela n'affecte pas les éléments stockés dans reused.

$.extend(
     {}, 
     reused, 
     {'bInfo': true}, // override one of the properties in "reused" 
     {aoColumns:// ...etc