2010-03-19 8 views
6

Soluzione:fa addChild ActionScript richiede un oggetto di visualizzazione prima

se avete lo stesso problema, addElement() invece di addChild() è quello che ha fatto


Sono cercando di passare da mxml a actionsctipt. Ho uno <s:Rect> che ho creato e ne ho impostato le proprietà, ma non riesco ad aggiungerlo.

var aRect:Rect = new Rect(); 
//set properties like aRect.x, aRect.y, aRect.width, aRect.height 

//tried adding it various ways 
addChild(aRect); 
Application.addChild(aRect); 
Application.application.addChild(aRect); 
stage.addChild(aRect); 

Ma continuo a ricevere l'errore 1067: Assegnazione forzata implicita di un valore di tipo spark.primitives: Rect a un tipo di flash.display non correlato: DisplayObject

Originariamente in MXML, è stato proprio all'interno <s:Application> non nidificato all'interno nulla

<s:Application> 

    <s:Rect id="aRect" x="10" y="10" width="15%" height="15%"> 
     //then fill code here, removed for readability 
    </s:Rect> 

</s:Application> 

Qual è il problema, ho pensato ActionScript sarebbe stato più bello di MXML.

+0

Mai usato Flex 4 prima, ma sono curioso di questo, spero che riceverai una risposta –

+0

Il tuo esempio di codice dalla classe del documento o da qualsiasi altra classe? – JanD

+0

@JanD, Il codice è giusto nell'applicazione mxml principale (ho solo un mxml, nessun componente o altro), e ovviamente il codice actionscript si trova in una funzione init() nel tag script e viene attivato su creationComplete, praticamente esattamente come al solito. Tranne che ora sto provando a creare questi elementi visivi con th actioncript. – touB

risposta

1

È perché Flex 4 ha cambiato significativamente il modo in cui la gerarchia di visualizzazione funziona in applicazioni basate su MXML. Questo è un po 'confuso dal momento che addChild() non funziona più semplicemente come vorresti che fosse - devi aggiungere elementi a un dataprovider, e quindi la logica di mostrare quegli elementi (quali aggiungere dove, come inciderli , ecc.) viene gestito altrove. È una specie di cambiamento utile, però, perché ti costringe a separare le tue preoccupazioni in modo molto concreto. Una volta che tutti i tuoi elementi sono stati aggiunti al tuo dataProvider, puoi scambiare gli oggetti di Layout a piacimento (anche in fase di esecuzione) per cambiare il modo in cui la tua applicazione appare.

MODIFICA: tecnicamente non è lo stesso displayList a essere cambiato. È il fatto che l'unità di base utilizzata da Flex è ora il "Gruppo" - anche s: l'applicazione estende il gruppo. Aggiungi il tuo contenuto a un gruppo (o all'applicazione di livello superiore) e poi assegni al gruppo un layout per dirgli come visualizzare gli elementi che hai aggiunto.

+0

Myk ti interessa fare un post sul blog e magari aggiungerlo alla tua risposta qui. La parte relativa a "Una volta che tutti i tuoi elementi sono stati aggiunti al tuo dataProvider, puoi scambiare gli oggetti di Layout a piacimento (anche in fase di esecuzione) per cambiare il modo in cui appare l'applicazione." è particolarmente interessante ed è probabilmente meglio comprensibile con il codice che con le parole. Grazie. – touB

+0

Ha, suppongo che qualcuno dovrebbe scrivere questo - so che il libro di ricette Flex 4 della stampa O'Reilly fa un ottimo lavoro di spiegarlo. Dovrebbe essere presto disponibile. Nel frattempo cercherò un buon articolo, sono sicuro che c'è qualcosa là fuori - se lo trovo lo posterò qui. – Myk

+0

Ecco un video tutorial che lo spiega - http://flex4.org/2009/06/23/flex-4-layouts/ In pratica, la maggior parte delle viste di Flex 4 (tra cui s: Application) hanno una proprietà di layout. Ciò determina come vengono visualizzati gli oggetti e puoi creare i tuoi layout personalizzati oltre a quelli di base. Il video lo spiega abbastanza bene! – Myk

0

Sì, è necessario un DisplayObject. Non ho familiarità con spark.primitives.Rect, ma forse potresti semplicemente creare un nuovo Sprite e chiamare i metodi sul suo oggetto Graphics per disegnare il rettangolo?

0

In base ai documenti live, il metodo addChild della classe Application richiede che sia un oggetto displayObject.

2

ha provato a cambiare addChild(aRect); a addElement(aRect); e ha funzionato magnificamente.

0

Estremamente noi ci sforzeremo spesso di aggiungere asset flash (swf swc) (oggetti di visualizzazione) utilizzando addElement.

Sto lavorando su un modo per farlo proprio ora :(più cerchi e saltando

Anche il mio SWC non è visualizzabile nel pacchetto explorer (perché no?)

Problemi correlati