Toon posts:

[Flash] String Custom Formatter

Pagina: 1
Acties:

Verwijderd

Topicstarter
Situatie:
Software genereerd een string in een XML bestand dat de uptime van de server weergeeft. Deze software kan ik NIET veranderen en ik kan dus ook niet de weergave in XML veranderen.
Nu heb ik echter een Flash menu gemaakt met daarin een XML-connector, een DataSet en een DataGrid.
De XML-connector werkt prima en de DataSet en DataGrid werken ook prima aangezien ik het gebruik om veel meer weergegeven weer te geven dan alleen de server-uptime. Ik gebruik ook veel Custom Formatters om alle entries in de XML datavelden op de goede manier weer te laten geven in de DataGrid.
Echter bij de 'server-uptime' heb ik problemen.

Probleem:
Custom Formatters werken alleen om datablokken om te zetten naar strings en andersom, niet om strings te 'reformatten' naar een andere string.

Huidige situatie:
Zo staat hij als string in het XML bestand:
code:
1
<uptime>1 weeks 2 days 6 hours 24 mins</uptime>

Zo wordt hij nu dus weergegeven in de DataGrid:
code:
1
1 weeks 2 days 6 hours 24 mins



Gewenste situatie:
Nog steeds zo in het XML bestand:
code:
1
<uptime>1 weeks 2 days 6 hours 24 mins</uptime>

Maar weergegeven in de DataGrid als:
code:
1
1W 2D 6H 24M



Dit kan dus volgens mij niet gedaan worden met een custom formatter. Hoe ik dit echter wel voor elkaar kan krijgen is me niet helemaal duidelijk. Alle antwoorden zijn welkom.
En als dit al een keer voorbij is gekomen, mijn excuses. Ik heb echter al een tijdje gezocht met google en hier op GoT (wellicht naar de verkeerde woorden, maargoed...)

Bij voorbaat dank.

p.s. Ik gebruik flash nu ongeveer een week of anderhalf, maar ben er heel veel mee bezig geweest dus de basis is me meer dan duidelijk.

  • LB Back
  • Registratie: November 2004
  • Laatst online: 03-06-2025
code:
1
2
3
inputString = "1 weeks 2 days 6 hours 24 mins";
yourUptimeArray = inputString.split(" ");
outputString = yourUptimeArray[0]+"W "+yourUptimeArray[2]+"D "+yourUptimeArray[4]+"H "+yourUptimeArray[6]+"M";

Verwijderd

Topicstarter
dankjewel, dit is neem ik aan bedoeld om een customhandler omheen te bouwen?

  • LB Back
  • Registratie: November 2004
  • Laatst online: 03-06-2025

Verwijderd

Topicstarter
Hmmm, ik ben er nu een tijdje mee bezig geweest maar ik krijg het toch niet goed aan de praat.

code:
1
2
3
4
5
6
7
8
9
10
11
class Uptime extends mx.data.binding.CustomFormatter {
    function format(rawValue) {
        var returnValue;
        var inputString = new String();
        var yourUptimeArray = inputString.split(" ");
        var outputString = yourUptimeArray[0]+"W "+yourUptimeArray[2]+"D "+yourUptimeArray[4]+"H "+yourUptimeArray[6]+"M";
        returnValue = outputString;

        return returnValue;
    }
}


Het lijkt me dat de fout in deze regel zit:
var inputString = new String();
Maar ik krijg het niet goed voor elkaar om dit te laten werken.
"var inputString =" moet natuurlijk de value krijgen van de DataSet... maar ik weet niet precies hoe dit werkt. Ik heb menig tutorial bekeken maar er zelf niks werkends uit kunnen destilleren. Ook de livedocs boden geen uitkomst.

Hopelijk kan iemand me weer op het goede spoor helpen :)
bij voorbaat dank.

  • sanderb
  • Registratie: November 2000
  • Laatst online: 23-02 19:39
Flash ActionScript:
1
2
        var inputString = new String();
        var yourUptimeArray = inputString.split(" ");


inputString is leeg op het moment dat je gaat splitten dan.
welke waarde heeft rawValue op dat moment? bevat die de data die je wil formatten?
als rawValue de string is die je anders wil, moet je eerst inputString gelijk stellen aan rawValue.
is rawValue een string?
in dat geval zou je dus
Flash ActionScript:
1
var yourUptimeArray = rawValue.split(" ");

kunnen doen...

" A common mistake that people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools. " - Douglas Noel Adams


Verwijderd

Topicstarter
Ja dat is hem dus juist... uit alle documentatie is het me dus nog steeds niet duidelijk hoe die Customformatters nu precies werken (ik werk ook pas met Flash sinds 2 weken)

Heb het nu zo geprobeerd:
code:
1
2
3
4
5
6
7
8
9
10
class Uptime extends mx.data.binding.CustomFormatter {
    function format(rawValue) {
        var returnValue;
        var yourUptimeArray = rawValue.split(" ");
        var outputString = yourUptimeArray[0]+"W "+yourUptimeArray[2]+"D "+yourUptimeArray[4]+"H "+yourUptimeArray[6]+"M";
        returnValue = outputString;

        return returnValue;
    }
}

Zoals jij zei... maar het werkt nog steeds niet :?. Ik heb nog niet genoeg kennis om de interne werkingen van de Actionscripts volledig te begrijpen, maar nogal ergerlijk dat ik zelfs dit niet aan de praat kan krijgen.

[ Voor 5% gewijzigd door Verwijderd op 25-04-2006 23:03 ]


  • sanderb
  • Registratie: November 2000
  • Laatst online: 23-02 19:39
Ik heb nooit met de customFormatter gewerkt, maar in de help staat een redelijk uitgebreid example.

Flash ActionScript:
1
2
3
4
5
6
7
8
9
10
11
    function format(rawValue) {
        var returnValue;
        var strArray = new Array('one', 'two', 'three');
        var numArray = new Array(1, 2, 3);
        returnValue = 0;
        for (var i = 0; i<strArray.length; i++) {
            if (rawValue == numArray[i]) {
                returnValue = strArray[i];
                break;
            }
        }


Hierbij wordt dus gekeken of er een element uit de numArray wordt gevonden in de rawValue, en vervangt die value voor het element in de strArray met dezelfde index.

in jouw situatie heb je dus een inputArray en een outputArray met de volgende waarden:
Flash ActionScript:
1
2
var inputArray = new Array(' weeks', ' days', ' hours', 'mins');
var outputArray = new Array('W', 'D', 'H', 'M')


je vervangt " weeks" (incl de spatie dus) door "W" ...enz

Flash ActionScript:
1
2
3
4
5
6
7
8
9
10
11
    function format(rawValue) {
        var returnValue;
        var inputArray = new Array(' weeks', ' days', ' hours', 'mins');
        var outputArray = new Array('W', 'D', 'H', 'M')
        returnValue = 0;
        for (var i = 0; i<outputArray.length; i++) {
            if (rawValue == inputArray[i]) {
                returnValue = outputArray[i];
                break;
            }
        }


niet getest, dus geen garantie dat het werkt :)
Overigens weet ik niet of je verplicht ook een unformat method moet hebben in je subclass

" A common mistake that people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools. " - Douglas Noel Adams


Verwijderd

Topicstarter
Hehe na het lezen van de tutorials had ik vrijwel precies hetzelfde gefabriceerd maar dat werkte ook niet. En na het testen van jouw versie werkte het nog steeds niet :'(. (ook niet na het kloppend maken van het aantal } tekens).

En nee, die unformatter (andere kant op) laat me koud :9.

[ Voor 16% gewijzigd door Verwijderd op 26-04-2006 10:31 ]

Pagina: 1