2010-12-22 2 views
0

J'aimerais créer aa série de variables comme suit les paramètres qui ont par chacun:JS/jQuery - conseils sur la création d'une variable qui peut être utilisé dans de multiples fonctions

var panel_myfeed = new Array(); 
panel_myfeed[0]="/myfeed"; 
panel_myfeed[1]="#view-panel-myfeed"; 
panel_myfeed[2]="XXXXXXXX"; 

var panel_OtherPanel = new Array(); 
panel_OtherPanel[0]="/otherurl"; 
panel_OtherPanel[1]="#other-url-panel"; 

var panel_OtherPanel2 = new Array(); 
panel_OtherPanel2[0]="/otherurl2"; 
panel_OtherPanel2[1]=".other-url-panel2"; 

Alors je veux avoir deux fonctions séparées pouvant utiliser ces variables

function WhichPanel(url) { 
    *** Given a URL var like /myfeed, which which panel[0] this belongs to so I can get the other variables 
    ** do something now that I have the settings above 
} 

function KillPanel(url) { 
    *** Given a URL var like /myfeed, which which panel[0] this belongs to so I can get the other variables 
    ** do something now that I have the settings above 
} 

Suggestions? thxs

+0

suggestions? – yoda

Répondre

1

Il devient extrêmement difficile de traiter les tableaux de cette façon; vous devez vous rappeler ce que les index représentent. Il est préférable d'avoir un objet avec des noms de propriétés significatifs.

function SelectObj(id, clz) { 
    this.id = id; 
    this.clz = clz; 
} 

var objMap = { 
    "/myfeed": new SelectObj('#view-panel-myfeed', 'XXXXXX'), 
    "/otherurl": new SelectObj('#other-url-panel', null), 
    "/otherurl2": new SelectObj(null, '.other-url-panel2') 
}  

function WhichPanel(url) { 
    var obj = objMap[url]; 
    // do something with obj.id and/or obj.clz 
} 

function KillPanel(url) { 
    var obj = objMap[url]; 
    // do something with obj.id and/or obj.clz 
} 

Un autre avantage avec ce type d'approche est que vous pouvez ajouter des fonctions à votre classe, par exemple:

SelectObj.prototype.buldSelector = function() { 
    var selector = ''; 
    if(this.id) selector += this.id; 
    if(this.clz) selector += this.clz; 
    return selector; 
} 
2

une carte d'objet serait plus facile ici, comme ceci:

var panels = { "/myfeed": "#view-panel-myfeed", 
       "/otherurl": "#other-url-panel", 
       "/otherurl2": ".other-url-panel2" } 

Ensuite, dans vos fonctions, vous pouvez juste faire panels[url] pour obtenir le sélecteur qui va avec. Si vous avez besoin d'autres propriétés, viennent des objets à la place pour les valeurs, comme ceci:

var panels = { "/myfeed": { selector: "#view-panel-myfeed", other: "value" }, 
       "/otherurl": { selector: "#other-url-panel" }, 
       "/otherurl2": { selector: ".other-url-panel2" } } 

Ensuite, pour obtenir le sélecteur, il serait panels[url].selector, .property pour les autres propriétés, etc.

+0

intéressant, est-ce pur JS ou jQuery? Aussi, j'ai 3 panneaux, donc serait-ce 3 blocs comme vous avez ci-dessus? Et puis une fois que j'ai tous les 3+, comment puis-je chercher une URL, pour quel panneau possède cette URL? – AnApprentice

+1

@AnApprentice - juste une carte d'objet comme je l'ai ci-dessus, avec une clé pour chaque, l'URL étant la clé est la recherche ... et c'est JavaScript de base, pas de jQuery ici :) –

+0

très agréable. Un problème cependant est que si j'utilise l'URL comme clé, toutes les URL ne sont pas statiques. Certains sont variables. J'ai/myfeed,/item,/item/312, où 312 est un nombre aléatoire. Je faisais quelque chose comme else if (/\/items\/\d+/.test(url2load)) est-ce possible avec une carte d'objet? – AnApprentice

1

Je voudrais suggère d'utiliser un objet comme celui-ci avec JSON:

var panels = { 
    '/myfeed': { 
     selector: "#view-panel-myfeed", 
     somevariable="XXXXXXXX" 
    }, 
    '/otherurl': { 
     selector: "#other-url-panel" 
    }, 
    '/otherurl2': { 
     selector: ".other-url-panel2" 
    } 
} 

Et puis ca vous obtenez tous les paramètres avec:

function WhichPanel(url) { 
    var settings = panels[url]; 
    alert(settings.selector); 
} 

WhichPanel('/myfeed'); //should alert "#view-panel-myfeed" 
Questions connexes