2014-06-05 3 views
0

Je construis un noeud/application angulaire. Et je ne suis pas habitué à javascript. J'ai fait un service pour tous mes obèses liste statique. J'essaie de rendre ce code aussi générique que possible. Je pense que je peux l'améliorer plus. Voici ce que j'ai pour le moment (je mets seulement 2, mais je vais avoir beaucoup plus):Comment améliorer ce code javascript

function returnSolList (n, $resource) { 
    return $resource(n+'/', {}, {'query' : {method : 'GET', cache : true, isArray:true } }); 
} 

mod.factory('Cities', ['$resource', function($resource) {return returnSolList('cities', $resource);}]); 
mod.factory('Boites', ['$resource', function($resource) {return returnSolList('boites', $resource);}]); 

Je pense que je pouvais faire mieux avec quelque chose peut-être en déclarant mes services dans une liste [ « Villes », 'Boites'] puis boucle pour construire l'usine. Il y a aussi une redondance dans la ressource $ dont je voudrais me débarrasser.

Mais je ne suis pas sûr de savoir comment le faire.

Répondre

2

Vous pouvez ajouter 'cities', 'boites',... dans un tableau et utiliser un for pour générer le code, mais ce sera un peu complexe. Tu veux vraiment ça?

function returnSolList (n, $resource) { 
    return $resource(n+'/', {}, {'query' : {method : 'GET', cache : true, isArray:true } }); 
} 

var names = ['Cities','Boites']; 
for(var i=0; i<names.length; i++){ 
    mod.factory(
     names[i], 
     [ 
      '$resource', 
      (function(name){ 
       return function($resource){ 
        return returnSolList(name, $resource); 
       } 
      })(names[i].toLowerCase()) 
     ] 
    ); 
} 

La partie complexe est que vous devez retourner une fonction qui utilise une variable qui utilise i l'intérieur du i pour tout est en train de changer. Vous devez passer i dans une fonction pour qu'elle soit sauvegardée localement (sur la portée).


En savoir plus sur javascript fermeture: How do JavaScript closures work?

Pour code javascript rapetisser/check speedup Closure Compiler

+0

La solution que j'ai travailler connais bien, et le code est simple. Je pensais que je pourrais le rendre encore plus simple avec une boucle. Mais comme je peux le voir, c'est assez compliqué. Je vais garder mon code tel qu'il est. Merci pour la réponse et pour le lien. – Tyvain

+0

Je suis d'accord avec vous. Habituellement, une boucle rend les choses plus simples, mais quand vous devez déclarer des fonctions à l'intérieur des boucles, le code est un peu plus complexe et les gens deviennent confus. Le compilateur de fermeture est vraiment bon pour le débogage aussi. Mais assurez-vous de ne pas avoir d'avertissement lorsque vous l'utilisez sur de gros fichiers. Et si vous êtes familier avec les terminaux, il existe également une version jar. – GramThanos