2010-08-01 3 views
0

Je suis perdu ici. J'ai cette classe, je l'ai créé, qui prend des arguments sous forme d'objet:Objet de coulée en tant que hachage dans le prototype

new Widget('id_of_element', { option1: 'foo', option2: 'bar' }); 

Cependant, le second argument n'est pas considéré comme un hachage, mais comme un objet, donc je ne peux pas appliquer les paramètres par défaut pour si l'on n'est pas réglé:

initialize: function (element, options) { 
    this.options = $H({ option1: 'something', option2: 'else', option3: 'hello', option4: 100 }).update(options); 
} 

J'ai besoin Vales de la « options de l » argument à convertir en une table de hachage, donc je peux utiliser la fonction mise à jour(). Je ne trouve rien dans le framework Prototype qui va lancer un objet comme un Hash.

Ce qui est étrange est, sur this.options.inspect(), toutes les valeurs correctes apparaissent, mais quand je l'appelle:

alert(this.options.option1); 
// or 
alert(this.options['option1']); 

... ils reviennent comme non défini. Pourquoi la méthode Hash # inspect trouverait-elle ces valeurs, mais n'est-elle pas encore définie? Ai-je manqué une compréhension substantielle d'un certain type?

Répondre

1

Il n'y a pas de casting en JavaScript. Si vous voulez un Hash alors vous devrez en créer un, ce que vous faites déjà.

De la documentation de prototype, il semble que vous devez obtenir les valeurs en utilisant les méthodes de Hash:

alert(this.options.get("option1")); 
+0

Si oui ou non je peux jeter est hors de propos. Je devrais être capable d'appeler ces valeurs. Si Hash # inspect peut les voir comme ils devraient l'être, pourquoi ne puis-je pas extraire les valeurs à utiliser? – mwieczorek

+0

Mis à jour ma réponse. –

+0

Merci. Je connaissais la méthode Hash # get, mais j'espérais vraiment que les variables puissent être accédées plus simplement - tout comme certaines des méthodes Element qui renvoient une paire de données x/y et left/top accessible de cette façon – mwieczorek

Questions connexes