Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14

Discussione: cellRenderer su List

  1. #1
    Utente di HTML.it L'avatar di M@nu
    Registrato dal
    Dec 2001
    Messaggi
    352

    cellRenderer su List

    Ciao a tutti,
    premesso che non sono una espertona di actionscript e che quello che vi so per postare è frutto di duro lavoro, di scoppiazzatura qua e là, e anche di un po di cu.. usp.. fortuna!

    Sono riuscita a fare il cellrenered di alcuni dati che formatto in html in una datagrid...
    ma ora, tutto ciò, vorrei che stasse in una datalist (perchè non voglio la riga di intestazone) e non ci riesco stauffa!!!

    Codice PHP:
    XML.prototype.ignoreWhite true
    import mx
    .services.WebService;
    import mx.services.PendingCall;
    import mx.controls.gridclasses.DataGridColumn;
    amazonHtmlFunction = function (itemObj:ObjectcolumnName:String) {
        if (
    itemObj == undefined || columnName == undefined) {
            return;
        }
        var 
    url "http://localhost/documents/HOME/"+itemObj.url;
        var 
    tit itemObj.tit;
        var 
    descrizione itemObj.descrizione;
        var 
    html:String;
            
        switch (
    columnName) {
        case 
    "img" :
            
    html "<img src=\""+url+"\" vspace=\"2\" hspace=\"2\" width=\"100\">";
            return 
    html;
            break;
        case 
    "desc" :
            
    html "[b]" tit "[/b]
    descrizione;
            return 
    html;
            break;
        }
    };


    var 
    xml_array = new Array();
    var 
    dp_array = new Array();
    var 
    my_ws:WebService = new WebService("http://localhost/WSmy.asmx?WSDL");
    var 
    pc:PendingCall my_ws.prova();        
    pc.onResult = function(result) {
        if (
    result != "err") {
            var 
    _xml:XML=new XML(result);        
            
    xml_array _xml.firstChild.childNodes;
            for (var 
    i:Number 0xml_array.lengthi++) {    
                
    dp_array.push({tit:xml_array[i].childNodes[1].toString(), descrizione:xml_array[i].childNodes[2].toString()}) 
            }
            
            
    amazon_grd.rowHeight 75;
            
    amazon_grd.dataProvider dp_array;
        }
    }

    // --- DataGrid columns ---
    amazon_grd.columnNames = ["img","desc"];
    var 
    col:mx.controls.gridclasses.DataGridColumn;
    //
    col amazon_grd.getColumnAt(0);
    col.width 200;
    col.cellRenderer "HtmlCellRenderer";
    col["htmlFunction"] = amazonHtmlFunction;

    col amazon_grd.getColumnAt(1);
    col.width 400;
    col.cellRenderer "HtmlCellRenderer";
    col["htmlFunction"] = amazonHtmlFunction;


    import mx.core.UIComponent;
    import mx.controls.TextArea;
    import TextField.StyleSheet;

    class 
    HtmlCellRenderer extends UIComponent
    {

        static public var 
    CssUrl:String;        // Global: URL for CSS stylesheet
        
    static public var style_sheet:StyleSheet null;
        
        var 
    htmlComponent:TextField;

         var 
    owner// The row that contains this cell    
        
    var listOwner MovieClip;   // the reference we receive to the list
        
    var getCellIndex : Function; // the function we receive from the list
        
    var    getDataLabel : Function; // the function we receive from the list
        
        
    var previousLabel:String null// for optimization

        
    function HtmlCellRenderer()
        {
        }

        function 
    createChildren(Void) : Void
        
    {
            if (
    CssUrl != undefined && style_sheet == null
            {
                
    style_sheet = new TextField.StyleSheet();
                
    style_sheet.load(CssUrl);
              }
            if (
    htmlComponent == undefined)
            {
                
    createLabel("htmlComponent"1);
            }
            
    htmlComponent.html true;
            
    htmlComponent.border false;
            
    htmlComponent.multiline true;
            
    htmlComponent.wordWrap true;
            
    htmlComponent.selectable false;
            
    htmlComponent.background false;
            
    htmlComponent.styleSheet style_sheet;
            
    size();

        }

        
    // note that setSize is implemented by UIComponent and calls size(), after setting
        // __width and __height
        
    function size(Void) : Void
        
    {
            
    htmlComponent.setSize(__width-2__height-2);
        }

        function 
    setValue(str:Stringitem:Objectsel:Boolean) : Void
        
    {
            
    // Ligne vide ou Header
            
    if (item == undefined
            {
                
    // Special case for headerRenderer
                
    htmlComponent.htmlText str;
                
    previousLabel null;
                return;
            }
            
            var 
    columnIndex this["columnIndex"]; // private property (no access function)
            
    var columnName getDataLabel();
            var 
    htmlFunction : Function = listOwner.getColumnAt(columnIndex).htmlFunction;
            if (
    htmlFunction != undefined
            {
                var 
    label htmlFunction(itemcolumnName);
                if (
    label != undefined
                {
                    
    // Important pour optimisation
                    // Empêche un flip-flop des images
                    
    if (label != previousLabel
                    {
                        
    htmlComponent.htmlText previousLabel label;
                    } 
                } 
                else 
                {
                    
    htmlComponent.htmlText "";                
                }
            }
            else 
            {
                
    htmlComponent.htmlText str;                
            }
        }

        function 
    getPreferredHeight(Void) : Number
        
    {
            if (
    owner == undefined) return 18;
            return 
    owner.__height 2;
        }

         
    //function getPreferredWidth :: only really necessary for menu


    è una cosa assurda cercare di fare questo su un componente List invece che sulla DataGrid?
    Immagino di no...
    ma non riesco nemmeno trovare l'equivalente di import mx.controls.gridclasses.DataGridColumn

    le DataGridColumn cosa diventano in un List???

    un aiutiinoooo...??
    confido in voi ;-)


    (all'indirizzo http://philflash.inway.fr/dghtmlrd/dghtmlrd.html c'è l'esempio al quale ho fatto riferimento per la datagrid)
    IL MONDO È BELLO PERCHÉ È VARIO.

  2. #2
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    so che non è una soluzione particolarmente elegante, ma se hai difficoltà a gestire un List non sarebbe più facile usare direttamente un datagrid con una sola colonna e tenere buono il codice utilizzato?

  3. #3
    Utente di HTML.it L'avatar di M@nu
    Registrato dal
    Dec 2001
    Messaggi
    352
    lo so...
    ma allora dovrei trovare il modo di nascondere anche l'head....

    e poi... io preferirei fare le cose belle pulite.......

    Ho letto un po dappertutto che tutti i componen derivano dal List (datagrid, combobox, ecc) quindi non riescoa capire perchè non riesco a "tradurlo", ci deve essere un modo equivalente per chiamare le colonne... no?
    IL MONDO È BELLO PERCHÉ È VARIO.

  4. #4
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    beh nel caso di List direi di no, perchè List equivale ad una singola colonna, al massimo di list puoi richiamare le singole celle

  5. #5
    Utente di HTML.it L'avatar di M@nu
    Registrato dal
    Dec 2001
    Messaggi
    352
    IL MONDO È BELLO PERCHÉ È VARIO.

  6. #6
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    ah in ogni caso anche in datagrid puoi rendere invisibili le intestazioni con la proprietà showHeaders

  7. #7
    Utente di HTML.it L'avatar di M@nu
    Registrato dal
    Dec 2001
    Messaggi
    352
    ah, allora mi sa che farò così... almeno per il momento o non ne vego fuori....


    inizialmente avevo provato su una List a fare il CellReneder di un mc, e pensavo di mettere i dei campi in questo movieclip (ad esempio una label) e riempirli con i dati del mio array, ma non riuscivo ad accedere agli elementi del mc, mi dava sempre undefined.

    Ti risulta che questo sia possibile?

    In internet ho trovato pochi esempi... e la guida e criptica!
    IL MONDO È BELLO PERCHÉ È VARIO.

  8. #8
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    non ho capito la questione dell'mc, il componente List se non sbaglio carica solo testi, ma credo di stare travisando quel che mi dici

  9. #9
    Utente di HTML.it L'avatar di M@nu
    Registrato dal
    Dec 2001
    Messaggi
    352
    tranquillo, può essere benissimo che sia stata io a scrivere una stupidaggine.

    Avevo provato a impostare un cellrenderer, tipo

    myList.cellRenderer="mc"

    nel quale mc era un movieclip in libreria.
    Questo mi veniva correttamente ripetuto in tutte le righe del List, ma solo come elemento grafico.

    Quando ho provato a mettere dentro a mc label ecc, e ho provato a scorrere le righe le righe del List e chiamare mc, e ciò che ci stava dentro mi dava sempre undefined...
    IL MONDO È BELLO PERCHÉ È VARIO.

  10. #10
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    ah ok, probabilmente esistono delle regole per creare l'mc che farà da cellrenderer, ma in effetti il manuale è un po' criptico in questa cosa, almeno quello in inglese... vedo se quello in italiano online mi chiarisce le idee per darti una risposta

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.