Newsgroup: it.comp.lang.javascript
Titolo: problema con oggetto

Qualcuno nota qualcosa di strano in questo codice?
Una volta che "trasforma" correttamente, 'document' + styleRef0 +
layerName + styleRef1, mi dice che non è un oggetto???
var styleRef0 = '';
var styleRef1 = '';
if (bw.isDOMm)
{
	styleRef0 = '.layers["';
	styleRef1 = '"]';
	alert('variabili: ' + styleRef0 + ' ' + styleRef1);
}
else if (bw.isDOM)
{
	styleRef0 = '.getElementByID("';
	styleRef1 = '").style';
	alert('variabili: ' + styleRef0 + ' ' + styleRef1);
}
else
{
	styleRef0 = '.all["';
	styleRef1 = '"].style';
	alert('variabili: ' + styleRef0 + ' ' + styleRef1);
}
function objLayer(layerName)
{
	return eval('document' + styleRef0 + layerName + styleRef1);
}
function initLayer(page,c)
{
	moveLayer(objLayer(page),21,30);
}

 layerName + styleRef1, mi dice che non è un oggetto???
Questo tipo di approccio e' abbastanza datato, ti conviene passare a
qualcosa di diverso. Piu' sotto ti suggerisco un alternativa.
L'errore puo' dipendere da diverse cose. Magari una delle variabili che usi
per fare la scelta e' settata male (bw.isDOMm o bw.isDOM) e quindi un
browser cerca di usare un metodo che non gli appartiene.
Seconda di poi, dove richiami la funzione initLayer? Magari la chiami in un
punto in cui l'oggetto non e' stato ancora creato dal browser.
Terzo, il metodo si chiama "getElementById" e non "getElementByID".
Bozza di script alternativo:
function getref(id){
	if (document.getElementById && 
		document.getElementById(id) && 
		document.getElementById(id).style){
 
		return document.getElementById(id);
	}else if (document.all && 
		document.all[id] && 
		document.all[id].style){
 
		return document.all[id];
	}else if (document.layers && document.layers[id]){
		document.layers[id].style=document.layers[id];
		return document.layers[id];
	}else{
		return null;
	}
}
 
-- 
ZER0://coder.gfxer.web-designer/
~ "Lo dice il buon senso, ma il buon senso non e' uno standard".
(Jeffrey Zeldman)
bofh ~ "Errore 010804: discrepanza bastarda tra la temperatura della sedia
e la temperatura del computer." (polygen)

 }
In sequenza:
 - copia
 - incolla
 - prototype
 - ringrazio Zer0 per la function
;)
-- 
"That until there is no longer first class
And second class citizens of any nation
Until the colour of a man's skin
Is of no more significance than the colour of his eyes
Me say war"
B.M. -- 

 ;)
Bah, un giorno mi dovro' far pagare in qualche modo.. :P oppure dovrei
iniziare a mettere i credit anche per le funzioncine cosi', ma mi pare una
scemenza :P
Per curiosita', a quale oggetto hai assegnato come prototype questa
funzione?
-- 
ZER0://coder.gfxer.web-designer/
~ Un computer e' fondamentalmente stupido.
Non fa cio' che vuoi che faccia, ma cio' che gli dici di fare.
Solo, e' uno stupido dannatamente veloce.
bofh ~ "Errore 405500.." (polygen)

 Per curiosita', a quale oggetto hai assegnato come prototype questa
funzione?
Quella era la sequenza da applicare, la applicherò entro fine giornata
(spero)
Però la domanda è interessante...Object ?
Un bel new Object().getRef(id) mi sembra carino...no?
Leggo che
The Object object is contained in all other JScript objects; all of its
methods and properties are available in all other objects. The methods can
be redefined in user-defined objects, and are called by JScript at
appropriate times. The toString method is an example of a frequently
redefined Object method.
Devo provare, mai provato prototype su questo oggetto (mai usato
esplicitamente, in realtà)


 esplicitamente, in realtà)
Io si, e c'e' un motivo per cui non l'ho piu' fatto.
Se aggiungi qualcosa al prototipo di Object, questo si ripercuote su ogni
altro tipo di oggetto, in quanto Object e' cio' da cui tutto discende.
Benche' questo ti possa, inizialmente, sembrare una gran figata, ha almeno
una controindicazione che, dipendentemente da come sei abituato a
programmare, puo' essere non di poco conto: Le (improprie in js) hashtable,
o (sempre impropri in js) array associativi.
Es.
var myitems={};
myitems["hello"]=0;
myitems["world"]=1;
for (var i in myitems)
	alert(i+"="+myitems[i]);
alert("2nd test");
 
Object.prototype.customprop=true;
var myitems={};
myitems["hello"]=0;
myitems["world"]=1;
for (var i in myitems)
	alert(i+"="+myitems[i]);
-- 
ZER0://coder.gfxer.web-designer/
~ Un computer e' fondamentalmente stupido.
Non fa cio' che vuoi che faccia, ma cio' che gli dici di fare.
Solo, e' uno stupido dannatamente veloce.
bofh ~ "Il Beancounter ha sbagliato a pacioccare con la lontananza della
televisione in bianco e nero" (polygen)

 generalizzata, 
Intendevo "specifica".. lapsus freudiano. :)
-- 
ZER0://coder.gfxer.web-designer/
~ Non esistono donne brutte. Dipende solo da quanta vodka bevi.
(proverbio russo)
bofh ~ "E` venuta a prodursi una interferenza tra la velocita` della CPU e
il mainframe IBM Portmap CISC a 64 bit basato su Solaris 0.0.9." (polygen)

 in js) hashtable, o (sempre impropri in js) array associativi.
[CUT]
Dovrei testarlo...cosa fa, elenca anche getRef ?


 Dovrei testarlo...cosa fa, elenca anche getRef ?
Esatto.
-- 
ZER0://coder.gfxer.web-designer/
~ Io non soffro di pazzia, ne godo ogni minuto.
(I don't suffer from insanity, I enjoy every minute of it)
bofh ~ "Il capo ha giocato con il mainframe IBM IMAP" (polygen)


Quando carico il js esisterŕ giŕ il document? Penso proprio di sě => ci
provo....se facessi un window.getRef() ?


 provo....se facessi un window.getRef() ?
Non ha senso per due motivi.
Primo, e' gia' cosi' (ovvero, qualsiasi funzione definisci in un JS e' in
realta' un metodo dell'oggetto window); secondo, perche' non fa alcun
riferimento a window internamente. Quel tipo di funzione ha senso solo se
la inserisci in document in quanto fa riferimento ad esso. Oppure, se la
associ ad un *tuo* oggetto custom che fornisce un "servizio".
-- 
ZER0://coder.gfxer.web-designer/
~ L'ingegnere non vive, funziona.
bofh ~ "Errore 026002.." (polygen)

 "servizio".
La sparo: se associo al document la userò come document.getRef(); invece mi
è venuto in mente: visto che alert==window.alert, ho pensato: se associo a
window non ho bisogno manco di nominarlo, e userò getRef().....
In questo momento non riesco a testare: gran c@zz@ta?
(così tanto per parlare, ovviamente, perché a quel punto tanto vale farmi
una function e metterla nello stesso js del prototype...anzi, mi sa che è
proprio la stessa cosa!)


 proprio la stessa cosa!
Ehm, esatto ^_^
-- 
ZER0://coder.gfxer.web-designer/
~ Se potete leggere questo, la mia donna e' caduta.
(Letta sul retro di una maglietta di un motociclista)
bofh ~ "Il CEO ha rotto la temperatura della radiolina" (polygen)

 Ehm, esatto ^_^
Eh, visto che non sono cosě brasato?
Mi sa che alla fin fine farň cosě: aggiungo nel js dei prototype questa
function e via.


 function e via.
Se non hai un oggetto che fornisce servizi o analogo, l'alternativa e'
quella o l'oggetto document.
.. Tutto questo mi fa ripensare al fatto che devo riprendere i design
patterns..
-- 
ZER0://coder.gfxer.web-designer/
~ ..ma in effetti il concetto di WYSYWYG (quello che vedi e' quello che
ottieni)
si applica ai computer malissimo, cosi' come si applica alle donne...
(The Real Programmer)
bofh ~ "Errore 610050." (polygen)
on air ~ "raf in tutti i miei giorni"

> Gia'.. Cmq io utilizzero' questo ponte del 2 Giugno
PONTE??????? De che?


 PONTE??????? De che?
Ah, no scusa.. lo chiamo "ponte" ma e' improprio. Il 2 e' festa, ed e'
mercoledi'. Io prendero 8 ore di recupero e cosi' con un giorno di ferie
riesco a farmi anche lunedi' e martedi' (alcuni invece prendo il 3 e 4).
Venerdi' me ne vo' a Firenze, e sabato parto e me ne sto a zonzo fino al 2
compreso. Poi vado a lavoro Giovedi' 3 e Venerdi'. Solo che Venerdi' si
lavora 6 ore e spiccioli invece che 8. 
-- 
ZER0://coder.gfxer.web-designer/
~ Un computer e' fondamentalmente stupido.
Non fa cio' che vuoi che faccia, ma cio' che gli dici di fare.
Solo, e' uno stupido dannatamente veloce.
bofh ~ "E` venuta a prodursi una incompatibilita` tra il carico del disco
ATA IDE e il cluster Portmap" (polygen)


 il 3 e 4).
'Azz, mi hai creato una falsa libidine... :-(


In data Fri, 21 May 2004 11:46:01 +0200, Cristiano Larghi ha scritto:
Visto che siamo in OT: ho installato dialog...
a parte che non capisco bene alcune cosette, me lo studio, ma...non vedo
piů le faccine! :-( la vedo cosě, senza la faccina: come inserirlo? (non
vivo senza!)
Altra domanda: devo ogni volta scegliere la firma, e non trovo dove settare
di default di mettere SEMPRE la signature...


 di default di mettere SEMPRE la signature...
Settings -> Server,Identities, Signatures -> Indentities -> Def Signatures.
-- 
ZER0://coder.gfxer.web-designer/
~ "Nei film americani, qualsiasi problema che venga considerato
sufficientemente catastrofico, puo' essere risolto facendo esplodere uno
o piu' ordigni nucleari" (ZER0 & Cosimo)
bofh ~ "La amante del Beancounter ha avuto a che fare con il cluster IMAP
quad C64 a 16 bit basato su AtheOS" (polygen)
on air ~ "visionaire"

 Settings -> Server,Identities, Signatures -> Indentities -> Def Signatures.
Grazie; avevo inserito lě il file da cui prenderle ma non avevo visto
questa voce.


Un ringraziamento a tutti per la cortesia, adesso provo a modificare
lo script con le indicazioni di ZERO.
Scusate per la lentezza nella risposta ma non trovavo il mio post...
Saluti
Uest

3) il metodo si chiama "getElementById" e non "getElementByID"
si si è solo un errore di sbaglio
questo è il contenuto di layers.js (comprese le tue modifiche)
//----------------------- Oggetto Layer
function objLayer(layerName)
{
	if (document.getElementById && document.getElementById(layerName) &&
document.getElementById(layerName).style)
	{
		return document.getElementById(layerName); // ma non va anche
.style??
	}
	else if (document.all && document.all[layerName] &&
document.all[layerName].style)
	{
		return document.all[layerName]; // come sopra
	}
	else if (document.layers && document.layers[layerName])
	{
		document.layers[layerName].style=document.layers[layerName];
		return document.layers[layerName];
	}
	else
	{
		return null;
	}
}
//----------------------- Show Layer
function showLayer(layerRef)
{
	if (bw.isDOMm)
	{
		layerRef.visibility = 'show';
	}
	else
	{
		layerRef.visibility = 'visible';
	}
}
//----------------------- Hide Layer
function hideLayer(layerRef)
{
	if (bw.isDOMm)
	{
		layerRef.visibility = 'hide';
	}
	else
	{
		layerRef.visibility = 'hidden';
	}
}
//----------------------- Move Layer
function moveLayer(layerRef,absX,absY)
{
	layerRef.left = absX + px;
	layerRef.top = absY + px;
}
//----------------------- Center Layer
function centerLayer(layerRef,w,h)
{
	var leftPosition = ((Xr - w) / 2);
	var topPosition = ((Yr - h) / 2);
	// var leftPosition = X + Math.round((X - w) / 2);
	// var topPosition = Y + Math.round((Y - h) / 2);
	layerRef.left = leftPosition;
	layerRef.top = topPosition;
}
//----------------------- Init Layers Function
function initLayer(page,c)
{
	if (c == 1)
	{
		centerLayer(objLayer(page),720,450);
		showLayer(objLayer(page));
	}
	else
	{
		moveLayer(objLayer(page),21,30);
		showLayer(objLayer(page));
	}
}

 }
function initLayer(page,c){
	page=objLayer(page);
	if (c==1){
		centerLayer(page,720,450);
		setVisible(page,true);
	}else{
		moveLayer(page,21,30);
		setVisible(page,true);
	}
}
on air ~ "RobertMiles Children"

 
http://fido.altervista.org/
Chiedo:
non esiste un shortcut per segnare tutti i messaggi di un newsgroup come
già letti?


 già letti?
Settings -> Configure Shortcuts/buttons
e imposti il tutto come meglio preferisci.
-- 
ZER0://coder.gfxer.web-designer/
~ "When you have eliminated the impossible, whatever remains,
however improbable, must be the truth." (S.H.)


 e imposti il tutto come meglio preferisci.
'Azz, mi sa che è meglio rimetterlo in inglese...
in italiano "Configura Pulsanti/scorciatoie" mi era sfuggito


 in italiano "Configura Pulsanti/scorciatoie" mi era sfuggito
Ti diro.. Di Dialog ci sono un sacco di cose che ancora devo scoprire, ma
per il momento non mi servono. :)
E personalmente, laddove posso, tendo a tenere i software in inglese (La
prima cosa che ho detto quando sono venuto a lavorare qua e' stata "Non
datemi Photoshop in italiano, che vi meno").
-- 
ZER0://coder.gfxer.web-designer/
~ "Nei film americani, qualsiasi problema che venga considerato
sufficientemente catastrofico, puo' essere risolto facendo esplodere uno
o piu' ordigni nucleari" (ZER0 & Cosimo)
on air ~ "Broken wings."