2011-02-14 9 views
1

J'ai actuellement un grand fichier javascript externe qui est utilisé sur la page. J'enveloppe actuellement le code dans une fonction auto-invoquant parce que j'ai d'autres sections qui sont chargées en utilisant des onglets ajax, donc je veux éviter de nommer les collisions avec ces autres fichiers js externes.Comment organiser un fichier javascript en plus petits morceaux?

Le code dans le fichier est organisé comme ci-dessous. Je voudrais diviser une partie du code à l'intérieur de l'espace de noms de plannerTab en fichiers plus petits, tout en conservant une partie de cet espace de noms.

Comment est-ce que je pourrais faire ceci? Ou, les gars, vous recommandez une approche différente? Merci!

// Document Ready 
$(function() 
{ 
    // initializes table 
    plannerTab.plannerTable.init(); 
}); 


var plannerTab = (function() 
{ 
    // All the code for the page is in here. I would like to extract sections 
    // from in here and put them into their own external files while still keeping 
    // the namespacing 
}(); 

Mise à jour

Comment pourrais-je séparer les parties de l'intérieur de la variable plannerTab en petits fichiers js externes, et maintenir encore qu'ils font partie de l'espace de noms plannerTab? Un petit exemple ci-dessous.

// Scope: plannerTab.config - Would like to store configuartion into a separate file 
    var config = { 

     selectors: { 
      tableId: '#plannerTable', 
      addTaskId: '#AddTask', 
      editTaskSelector: '#plannerTable .edit', 
      dateFilterSelector: '#plannerTable_TimeFilter li', 
      deleteTaskClass: '.delete', 
      searchFilter: '#plannerTable_filter', 
      selectedDateFilter: 'selected-dateFilter', 
      taskCellSelector: '#plannerTable .task-col', 
      taskClass: '.taskId' 
     }, 

     urls: { 
      addTaskFormURL: '/Planner/Planner/LoadAddTaskForm', 
      editTaskFormURL: '/Planner/Planner/LoadEditTaskForm', 
      deleteTaskURL: '/Planner/Planner/DeleteTask', 
      getTasksByDateRangeURL: '/Planner/Planner/GetTasksByDateRange', 
      viewTaskURL: '/Planner/Planner/ViewTask' 
     } 
    }; 
+0

Je suggère que vous gardiez un fichier, pour réduire les requêtes HTTP. –

Répondre

0

Regardez cet exemple (de Google)

<script type="text/javascript"> 
function importScript(url){ 
    var tag = document.createElement("script"); 
    tag.type="text/javascript"; 
    tag.src = url; 
    document.body.appendChild(tag); 
} 
window.onload = function(){ 
    // imports go here 
    importScript("foo.js"); // example 
}; 
</script> 
0

Je suppose que plannerTab devient un résultat de retour d'objet de l'auto fonction d'exécution. Si vous avez besoin d'ajouter dynamiquement des propriétés ou des méthodes à cet objet, vous pouvez jeter un oeil à jQuery.extend() http://api.jquery.com/jQuery.extend/

Vous devez modifier le JS externe pour utiliser la méthode jQuery extend à ajouter aux propriétés et méthodes existantes de plannerTab. Tant que vous maintenez plannerTab comme variable globale, vous continuerez à l'ajouter lorsque vous importerez plus de fichiers js externes.

Si vous utilisez le modèle de module pour gérer des variables privées dans plannerTab, veillez à tester le comportement de ces valeurs lorsque vous utilisez jQuery.extend(). Est-ce pour faciliter le développement ou le déploiement?

+0

oui, plannerTab est un objet qui contient beaucoup d'autres objets et tels, tels événements de page, configurations, etc ... Serait-il préférable d'ajouter cette variable à l'objet Jquery ou d'ajouter plus de propriétés à l'objet lui-même?) – chobo

+0

vous pouvez ajouter des propriétés à l'objet en utilisant simplement la notation par points 'plannerTab.newProperty = « une valeur »' Si vous souhaitez ajouter plusieurs propriétés, il suffit d'utiliser .extend $() – AlexRage

+0

Je suis peu lent aujourd'hui :) Je ne peux juste pas envelopper ma tête autour de comment je ferais ce qui précède (voir la section mise à jour en post). Est-ce que je rends ma fonction auto-invocable vide et colle sur de nouvelles méthodes et propriétés et les place dans des fichiers séparés? – chobo

Questions connexes