2010-09-20 2 views
0

Comment puis-je accéder à la clé d'une matrice non associée? Voici mon scénario, j'ai un tableau d'objets (dans ce cas, ils sont coordonnées):Récupération d'une clé de tableau (non associative) avec des informations limitées

coords[0] = {x: 37.543524, y: -56.65474} 
coords[1] = {x: 35.041292, y: -76.03135} 
//etc.. 

J'utilise un jQuery templating plugin pour imprimer les résultats:

$('#repeater').tmpl(coords).appendTo('body'); 

<script id="repeater" type="text/html"> 
    <p>[${key??}] ${x}, ${y}</p><br/> 
</script> 

Dans le modèle, J'ai accès aux propriétés de l'objet mais pas à l'index. Y at-il un moyen facile de récupérer la clé de cet objet dans le tableau? Ou devrais-je modifier le plug-in pour y avoir accès?

Merci!

Répondre

1

Je ne crois pas que le plugin vous donne accès à cette information, alors je vous suggère de simplement masser vos données pour l'inclure. Donc, si les coordonnées sont déjà définies comme vous l'avez mentionné, faites simplement une boucle et ajoutez une propriété 'clé' à chaque élément.

for(var key in coords) { 
    coords[ key ].key = key; 
} 

Ensuite, vous pouvez utiliser la propriété ${key} dans vos modèles.

+0

C'est ce que je pense que je vais faire, même si c'est un travail autour du problème :) coords.push ({clé: coords.length, x: xVal, y: yval}); –

0

Vous devez utiliser "pour"

Exemple

for(key in coords){ 
alert(key); 
} 

sortie 0,1

+0

Je sais que c'est redondant, mais il n'y a aucun moyen d'accéder à la clé de la valeur? coords [0] .key // est 0. Il n'y a pas de propriétés cachées ou quoi que ce soit qui me manque? Les fonctions peuvent toujours être renvoyées via arguments.callee, n'était pas sûr si les tableaux avaient quelque chose de similaire dans la nature. –

+0

@John non, coords [0] n'est pas conscient de sa position dans le tableau parent. Vous devez soit masser les données ou le calculer dans votre modèle. J'ai posté une solution qui suggère la première option. – BBonifield

+0

c'est le même code que j'ai ajouté, ne sais pas ce qui vous trompe? –

0
function index(item, array) { 
    return $.inArray(item, array) + 1; 
} 

$('#repeater').tmpl({coords: coords}).appendTo('body'); 

<script id="repeater" type="text/html"> 
    {{ each coords }} 
    <p>[${index($value, coords)}] ${x}, ${y}</p><br/> 
    {{ /each }} 
</script> 

dérivé de this example

+0

Cela semble fonctionner, pour une raison quelconque, le plugin n'est pas itératif comme il se doit. Je vais le tester un peu plus, merci pour votre aide! Très astucieux! –

+0

@ John Strickler - avez-vous remarqué la modification apportée aux données transmises au modèle? '{coords: coords}' – sje397

+0

Oui, vous avez vraiment abordé le problème en réalité: p Je suis allé avec 'masser' les données car cela fonctionnait pour ce dont j'avais besoin. Si j'avais besoin de quelque chose de plus précis, je serais allé ce que vous avez suggéré. Je n'ai pas passé beaucoup de temps à essayer de le faire avancer mais demain je pense que je vais prendre un autre coup de couteau! –

Questions connexes