Il semble que vous souhaitiez appeler une méthode à chaque fois qu'un élément est ajouté à un tableau. En supposant que vous ne comptez pas sur un cadre comme Angular, React ou RXjs, Array.observe
semble être votre meilleur pari.
Array.observe
est une fonctionnalité non-standard et seulement supportée par Chrome 36 pour le moment, donc vous aurez besoin de use a polyfill si vous avez besoin d'un large support par navigateur.
Mais fondamentalement, il devrait fonctionner comme ça
var arr = ['a', 'b', 'c'];
Array.observe(arr, function(changes) {
console.log(changes);
});
arr[1] = 'B';
// [{type: 'update', object: <arr>, name: '1', oldValue: 'b'}]
arr[3] = 'd';
// [{type: 'splice', object: <arr>, index: 3, removed: [], addedCount: 1}]
arr.splice(1, 2, 'beta', 'gamma', 'delta');
// [{type: 'splice', object: <arr>, index: 1, removed: ['B', 'c', 'd'], addedCount: 3}]
Cet exemple a été pris forme le MDN Documentation
Donc, dans votre cas, vous aurez besoin de deux variables. Un tableau contenant les chaînes, et une carte (ou objet) pour maintenir les touches (que je suppose est ce que game.add.sprite
retours)
var myArray = []
var myImages = {}
function addImage(imageString){
myImages['item_'+imageString] = item_apple = game.add.sprite(70, 70, imageString);
}
Array.observe(myArray, function(changes){
if(changes.type === 'add'){
addImage(changes.object[ changes.object.length -1 ])
}
});
donc ce qui suit entraînera cette
myArray.push('apple');
// myArray = ['apple']
// myImages = { item_apple: <Object> }
Cependant, Je ne suis pas sûr de la cohérence avec les spécifications Array.observe
proposées les polyfills disponibles. Donc, votre kilométrage peut varier.
Cependant, je pense que votre meilleur pari est d'utiliser quelque chose comme React.js
. C'est parfait pour ce genre de choses. Si vous n'êtes pas familier avec React, je vous recommande de passer quelques jours à l'apprendre.
Ok, alors quelle est votre question? – Jonathan
On dirait que vous voulez «observer» un tableau. Il y a beaucoup de façons de le faire, mais elles dépendent généralement d'une sorte de framework JS. Utilisez-vous un type de framework Javascript? – gargantuan
Non pour les fonctions javascript, seul Phaser pour les objets canvas comme .add.sprite –