Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    42

    Problema con classe di Mootools e metodo che non esiste.

    codice:
    window.addEvent('domready', function() {
    					solmizate = new Class({
    								initialize: function(intGiv) {
    												this.intGiv = intGiv;
    												this.intSad = null;
    												this.intAsd = null;
    												if($chk(document.score) == false) {
    																	document.score = new Array();
    																	document.score[0] = "0";
    																	document.score[1] = new Array();
    																	document.score[1][0] = "0";
    																	document.score[1][1] = "0";
    																	document.score[2] = new Array();
    																	document.score[2][0] = "0";
    																	document.score[2][1] = "0";
    																	document.score[3] = new Array();
    																	document.score[3][0] = "0";
    																	document.score[3][1] = "0";
    																	document.score[4] = new Array();
    																	document.score[4][0] = "0";
    																	document.score[4][1] = "0";
    																	document.score[5] = new Array();
    																	document.score[5][0] = "0";
    																	document.score[5][1] = "0";
    																	document.score[6] = new Array();
    																	document.score[6][0] = "0";
    																	document.score[6][1] = "0";
    																	document.score[7] = new Array();
    																	document.score[7][0] = "0";
    																	document.score[7][1] = "0";
    																	document.score[8] = new Array();
    																	document.score[8][0] = "0";
    																	document.score[8][1] = "0";
    																	document.score[9] = new Array();
    																	document.score[9][0] = "0";
    																	document.score[9][1] = "0";
    																	document.score[10] = new Array();
    																	document.score[10][0] = "0";
    																	document.score[10][1] = "0";
    																	document.score[11] = new Array();
    																	document.score[11][0] = "0";
    																	document.score[11][1] = "0";
    																	document.score[12] = new Array();
    																	document.score[12][0] = "0";
    																	document.score[12][1] = "0";
    																	}
    												},
    								scheme: function() {
    											var part = new Array();
    											var newNum = function(lim) {
    															var intRand = Math.floor(Math.random()*lim+1);
    															while(intRand == "0") {
    																		intRand = Math.floor(Math.random()*lim);
    																		}
    															return intRand;
    															};
    											for(i=1; i <= this.intGiv; i++) {
    																newNumTemp = newNum(this.intGiv);
    																if(part.indexOf(newNumTemp) == "-1") {
    																					part[i] = newNumTemp;
    																					}
    																else {
    																	i--;
    																	}
    																}
    											return part;
    											},
    								play: function(interval) {
    												/*accesso al flw ed esecuzione dell' intervallo*/alert(interval);
    												},
    								ask: function(parted) {
    											this.intAsd = parted;
    											this.intSad = null;
    											var countAsk = "0";
    											while(this.intSad != this.intAsd) {
    																/*aspetta qualche secondo*/
    																/*this.play(this.intAsd);*/alert(this.intAsd);
    																countAsk++;
    																document.score[this.intAsd][0]++;
    																}
    											if(countAsk == "1") {
    														this.intSad = "null";
    														document.score[this.intAsd][1]++;
    														}
    											},
    								say: function(intSadUser) {
    												this.intSad = intSadUser;
    												if(this.intSad == this.intAsd) {
    																return "true";
    																/*interrompe la riproduzione del suono sull' oggetto di flash*/
    																}
    												else {
    													return "false";
    													}
    												},
    								start: function() {
    											var part = null;
    											var countPart = "1";
    											while(true) {
    													part = this.scheme();
    													countPart = "1";
    													part.each(function(parted) {
    																	this.ask(parted);/*alert(parted);*/
    																	countPart++;
    																	});
    																}
    											}
    								});
    					});
    Qualcuno mi sà dire perchè quando uso questo oggetto cioè dopo aver lanciato il metodo start la error console di Firefox mi dice che ask (nella riga indicata col grassetto) non è una funzione.

  2. #2
    come la chiami la funzione ask?
    I DON'T Double Click!

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    42
    this.ask(parted);
    Ho provato anche in altri modi, funziona solo se tolgo le parentesi e il loro contenuto.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    42
    Posso avere un pò di aiuto?

  5. #5
    ah, si, non avevo letto bene il codice (colpa anche tua però, metti un solo tab di indent la prossima volta).

    codice:
    part.each(function(parted) {
    	this.ask(parted);
    	countPart++;
    });
    Allora, quando chiami each, gli passi una funzione. Il metodo esegue la funzione nello scope principale della pagina, cioè window, quindi il this, all'interno della funzione è l'oggetto window. Per farlo funzionare devi spostare lo scope all'oggetto this al di fuori della funzione. Questo lo puoi fare con il metodo bind di mootools delle funzioni:

    codice:
    part.each(function(parted) {
    	this.ask(parted);
    	countPart++;
    }.bind(this));
    I DON'T Double Click!

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    42
    Ora funzia, grazie. Ma perchè each usa lo scope di window? E' normale o ho sbagliato qualcosa io?

  7. #7
    eh, il fatto è che each prende anche un secondo argomento, che è l'oggetto da usare come scope della funzione (in effetti potresti anche fare
    codice:
    part.each(function(parted) {
    	this.ask(parted);
    	countPart++;
    }, this);
    ) e lo passa come primo parametro alla funzione call. Se non gli passi niente a call allora JS usa come scope l'oggetto window.
    I DON'T Double Click!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.