2010-12-01 5 views
0

Voici quelques fonctions que j'ai qui utilisent le plug-in officiel jQuery modèle et insérez certains JSON mes devs back-end me donnent dans le var s topPages et latestPages mais pour une raison quand j'appelle la fonction insertOrHideList() puis appeler la fonction renderList() normale, il est portant l'attribut max pour une raison quelconque. Ainsi, au lieu d'obtenir des résultats 100 (voir 2ème ligne de renderList() im obtenir 5 voir les appels insertOrHideList() en bas)JSON est en cours de modification dans mon JavaScript ... pourquoi?

Toutes les idées?

 function renderList(json,max){ 
      if(!max){max=100} 
      tempjson = json; 
      tempjson.length = max; 
      the_template = $.template(null, '<li><a href="{{if CONTENT_ID}}article/${CONTENT_ID}{{else}}${CATEGORY_TREE_ID}{{/if}}" title="Go to the ${TITLE} page">${TITLE}</a></li>'); 
      return $.tmpl(the_template,tempjson); 
     } 

     function insertOrHideList(selector,json,max){ 
      if(!max){max=5} 
      if(typeof json !== 'undefined' && json.length >= 5){ 
       $(selector).append(renderList(json,max)); 
      } 
      else{ 
       $(selector).parent().remove(); 
      } 
     } 
     insertOrHideList('.most-popular ol',topPages,5); 
     insertOrHideList('.recently-added ol',latestPages,5); 

     console.log(renderList(latestPages)); 

Répondre

3

Lorsque vous faites ceci:

tempjson = json; 

Ce tableau global tempjson est réglé sur la même référence que votre json (latestPages), afin que les modifications que vous apportez à lui, sont faits à l'original . Pour obtenir un nouveau tableau pour travailler avec, vous devez faire une copie, comme ceci:

var tempjson = json.slice(0); 

Notez le plus var, de sorte que nous ne sommes pas la création d'une variable globale soit (une autre question ici).

+0

oh, je pensais que ce copiait ... comment puis-je créer une nouvelle instance ?! –

+0

@Oscar - a ajouté comment faire :) –

+0

'tempjson = new Object (json)'? –

1

On dirait que vous passez max par cette ligne:

$(selector).append(renderList(json,max)); 

qui sera 5, des appels à insertOrHideList. Êtes-vous réellement après:

$(selector).append(renderList(json,json.length)); 

?

0
if(typeof json !== 'undefined' && json.length >= 5){ 
    $(selector).append(renderList(json,max)); 
} 

devrait être:

if(typeof json !== 'undefined' && json.length >= max){ 
    $(selector).append(renderList(json,json.length)); 
} 
Questions connexes