SWFAddress dynamic xml

ActionScript και Flex Προγραμματισμός

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
mgiota
Δημοσιεύσεις: 190
Εγγραφή: 15 Σεπ 2009 13:11
Τοποθεσία: Θεσσαλονίκη
Επικοινωνία:

SWFAddress dynamic xml

Δημοσίευση από mgiota » 22 Απρ 2010 17:00

Καλησπέρα,

θέλω να ενσωματώσω SWFAddress σε ένα site flash as3 που ξεκίνησα.

Μελέτησα καλά το video tutorial που βρίσκεται στο παρακάτω link http://www.gotoandlearn.com/play?id=107. Το παράδειγμα αυτό είναι πολύ κατανοητό αλλά είναι στατικό. Εγώ θέλω να το εφαρμόσω σε ένα δυναμικό Site που τραβάει δεδομένα με xml.

Έχω δημιουργήσει μία κλάση MenuItem όπου έχει τίτλο και deepLink. Στην Main κλάση έχω βάλει listener στο menuitem ως εξής:
menuitem.addEventListener(MouseEvent.CLICK,itemClicked,false,0,true);

όπου η function itemClicked έχει ως εξής:


function itemClicked(e:MouseEvent):void{

var DeepLink:String=e.currentTarget.Deeplink;//το DeepLink προέρχεται από την κλάση που έχω δημιουργήσει
SWFAddress.setValue(e.currentTarget.DeepLink);
loadSection(DeepLink);
}

Η loadSection φορτώνει το αντίστοιχο swf αρχείο:

private function loadSection(whatSection:String):void{

l = new Loader();
l.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, section_PROGRESS, false, 0, true);
l.contentLoaderInfo.addEventListener(Event.COMPLETE, section_COMPLETE, false, 0,true);
l.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, section_IO_ERROR, false, 0,true);
l.load(new URLRequest(whatSection));

}

Η section_COMPLETE το προστέτει στη σκηνή(δε παραθέτω τον κώδικα).

Στη συνέχεια παραθέτω τον κώδικα του SWFAddress:

private function onChange(e:SWFAddressEvent):void{

var title:String = 'My website';
for (var i = 0; i < e.pathNames.length; i++) {
title += ' - ' + e.pathNames.substr(0,1).toUpperCase() + e.pathNames.substr(1);
}
SWFAddress.setTitle(title);
loadSection(e.value.substr(1));
}

Όλα λειτουργούν μια χαρά, έχω όμως το εξής πρόβλημα. Δίπλα σε κάθε λέξη του μενού έχω ένα τετραγωνάκι το οποίο κινείται στο rollover και είναι σταματημένο στο μενού στο οποίο έχει γίνει κλικ. Οπότε στην itemClicked όπως έχω την τιμή DeepLink, μπορώ να έχω και την τιμή Y που χρειάζομαι για να μετακινήσω το τετράγωνο στη σωστή θέση.

Η απορία μου είναι η εξής:

Την εντολή SWFAddress.setValue(e.currentTarget.DeepLink) θέλω να την αλλάξω ώστε να παίρνει 2 παραμέτρους και να γίνει ως εξής:

SWFAddress.setValue(e.currentTarget.DeepLink+"/"+e.currentTarget.Y).

Τώρα όμως στη function onChange η γραμμή loadSection(e.value.substr(1)); δεν είναι σωστή, γιατί πλέον περιέχει π.χ. loadSection("products.swf/30") και έτσι δε μου φορτώνει το σωστό swf.

Ηε γενική μου απορία έχει να κάνει με το εξής: Όταν θέλω να στέλνω παραπάνω από μία παραμέτρους τις βάζω όλες μαζί στο setValue, χωρίζοντάς τες με / και μετά στην onchange με substr και functions για Strings παίρνω το κομμάτι που θέλω για να κάνω τη δουλειά μου; Στη συγκεκριμένη περίπτωση πως θα έκοβα το 30; Δεν θέλω να κόψω τους τελευταίους 2 χαρακτήρες γιατί το 30 μπορεί να ήταν 300. Θέλω να κόψω αυτό που ακολουθεί μετά το /.

Μπορεί να σας μπέρδεψα, αλλά πραγματικά έχω μπερδευτεί, γιατί δεν έχω μεγάλη εμπειρία και όπου και να ψάξω βλέπω μόνο στατικά παραδείγματα.

Θέλω να δημιουργώ paths και μετά να παίρνω το σωστό κομμάτι.

Αν κάποιος έχει κάτι στα υπόψη του!!!

mgiota
Δημοσιεύσεις: 190
Εγγραφή: 15 Σεπ 2009 13:11
Τοποθεσία: Θεσσαλονίκη
Επικοινωνία:

SWFAddress dynamic xml

Δημοσίευση από mgiota » 23 Απρ 2010 13:24

κάποιος που να χρησιμοποιεί SWFAddress με δυναμικό περιεχόμενο???

nkast
Δημοσιεύσεις: 137
Εγγραφή: 15 Νοέμ 2009 20:31
Επικοινωνία:

SWFAddress dynamic xml

Δημοσίευση από nkast » 23 Απρ 2010 14:01

H SWFAddress ειναι αρκετα lowlevel. Επιστρέφει απλά ένα string.
Αυτο που κάνω είναι να σπάω το string του path με το string.split("/") που 'σπαει' το path σε ενα array απο string. Μετα μπορείς να συνθέσεις ξανα το array με την join("/") πριν το περάσεις στην SWFAddress.

Θα μπορούσες να το πας ενα βημα πιο πέρα.
ΠΧ με μερικες κλάσεις όπως την παρακάτω:
class Document
{
public var id:Int;
}
και ενα path: default.html#/Home/Document/30/image/563/
Να περνας το path απο εναν parser και να σου δίνει
trace(parsedpath[0]); // Home
trace(parsedpath[1]); // Document
trace(parsedpath[1].id); // 30
trace(parsedpath[2].id); // 563

mgiota
Δημοσιεύσεις: 190
Εγγραφή: 15 Σεπ 2009 13:11
Τοποθεσία: Θεσσαλονίκη
Επικοινωνία:

SWFAddress dynamic xml

Δημοσίευση από mgiota » 23 Απρ 2010 17:48

Κατάλαβα περίπου τη λογική που περιγράφεις αλλά δεν ξέρω πως να το εφαρμόσω στην πράξη.

Όταν λες ότι σπάω το path, σε ποιο σημείο το σπάω, εννοώ σε ποια function; Στη συνάρτηση itemClicked εκεί που κάνω
var string:String=SWFAddress.setValue(e.currentTarget.DeepLink+"/"+e.currentTarget.Y) γράφω κάτι τέτοιο:

var arr:Array= string.split("/");

Oι μεταβλητές όμως string και arr θα πρέπει να είναι global σωστά;

Μετα που λες ότι μπορώ να συνθέσω ξανα το array με την join("/") πριν το περάσω στην SWFAddress που ακριβώς εννοείς; στη function onChange(e:SWFAddressEvent);

Aν μπορούσες να είσια λίγο πιο συγκεκριμένος γιατί απ'ότι βλέπεις το τοπίο ακόμα είναι θολό..

mgiota
Δημοσιεύσεις: 190
Εγγραφή: 15 Σεπ 2009 13:11
Τοποθεσία: Θεσσαλονίκη
Επικοινωνία:

SWFAddress dynamic xml

Δημοσίευση από mgiota » 23 Απρ 2010 18:21

ψιλοπροσπάθησα κάποια παραδείγματα και χρησιμοποίησα μόνο το split για να πάρω το σωστό κομμάτι του path και να εκτελέσει τη σωστή function με τη σωστή παράμετρο, δεν καταλαβαίνω όμως που θα έκανα το join. Σε τι θα με βοηθούσε;

Επίσης δεν κατάλαβα εκεί που κάνεις trace(parsedpath[2].id) που ορίζεις αυτό το id.

nkast
Δημοσιεύσεις: 137
Εγγραφή: 15 Νοέμ 2009 20:31
Επικοινωνία:

SWFAddress dynamic xml

Δημοσίευση από nkast » 24 Απρ 2010 01:41

Το join θα βοηθούσε αν ήθελες να δουλέψεις με το array που πήρες , να το αλλάξεις όταν ο χρήστης επιλέξει ένα menu και να περάσεις το path πίσω στο SWFAddress .

Από οτι καταλαβα εσύ φτιάχνεις ένα νέο path και το περνάς στην setValue.
Το ανέφερα επειδή συνδέεται στενά με το split.


Τα trace που γράφω είναι απλά μια ιδέα για ενα mini-framework που θα μπορούσες να στήσεις για να διευκολυνθείς στην πορεία...
(στο μοναδικό project που δούλεψα με deeplinking έμεινα στα string arrays και δεν ειχα την ευκαιρια να ασχολιθω ξανα)

Χωρις αμφιμβολία καθε τι στο path θα εμφανιζεται σε ζευγαρια.
πχ #\product\4\gallery\2\media\543

Θα μπορουσες να φτιαξεις λοιπον μια ενα class, px
class DLItem
{
var movietype:String;
var movieid:String;
public DLItem(movietype:String,movieid:String);
public toString():String; //returns "movietype/movieid/"
static Parse(path:String):Array; //returns an array of DLItem
public compare(item:DLItem);
}
και μια βοηθητική function θα σπαει το path σε μια σειρα απο DLItem.

mgiota
Δημοσιεύσεις: 190
Εγγραφή: 15 Σεπ 2009 13:11
Τοποθεσία: Θεσσαλονίκη
Επικοινωνία:

SWFAddress dynamic xml

Δημοσίευση από mgiota » 27 Απρ 2010 12:08

Καλημέρα,

ακόμα είμαι στο στάδιο πειραματισμού και δεν τα έχω ξεκαθαρίσει πλήρως. Συγκεκριμένα έχω ξεκινήσει ένα απλό παράδειγμα το οποίο αργότερα θα εφαρμόσω στο πραγματικό project που πρέπει να κάνω και πολύ σύντομα μάλιστα.


Έχω σε μία οθόνη στα αριστερά μία λίστα με κατηγορίες προϊόντων που τις τραβάω δυναμικά με xml από βάση δεδομένων και κάνοντας κλικ σε μία κατηγορία, φορτώνει στα δεξιά η λίστα με τα αντίστοιχα προϊόντα. Μέχρι εδώ λειτουργεί κανονικά το SWFAddress. Συγκεκριμένα το path που στέλνω είναι της παρακάτω μορφής http://localhost/dynamic_flash/#/Hotels/2 όπου hotels είναι το όνομα της κατηγορίας και ο αριθμός 2 είναι ο αριθμός (Index) της κατηγορίας στο συνολικό αριθμό των κατηγοριών. Το back button λειτουργεί κανονικά φορτώνοντας το σωστό περιεχόμενο αφού στην swfHandle καλώ την categoryClick(arr[1]) όπου arr1 είναι το Index της κατηγορίας.

Το πρόβλημα μου όμως τώρα είναι όταν κάνω κλικ σε συγκεκριμένο προϊόν. Να πω ότι όταν κάνω κλικ σε ένα προϊόν ανοίγει μια άλλη σελίδα με τις λεπτομέρειες του προϊόντος και ένα κουμπί back που με επιστρέφει στην προηγούμενη σελίδα με την επιλεγμένη κατηγορία. Το path που στέλνω τώρα είναι της μορφής http://localhost/dynamic_flash/#/Hotels ... %20Hotel/1. Στην swfHandle τώρα όμως πρέπει να καλέσω την productClick για να λειτουργήσει το back button.

Πως θα το χειριστώ αυτό; Με κάποιον έλεγχο στην swfHandle θα πρέπει να δω αν θα καλέσω την categoryClick ή την ProductClick; Η μπορώ να έχω μία function για το click και να στέλνω πάντοτε 4 παραμέτρους, όπου στο category click οι 2 τελευταίες παράμετροι θα είναι 0. Το πρόβλημα πέρα από το SWFAddress που προσπαθώ να εφαρμόσω πρώτη φορά είναι ότι πρώτη φορά στήνω site σε flash και δεν είμαι σίγουρη αν το στήνω καλά.

Μπορώ να παραθέσω τον κώδικά μου μέχρι στιγμής αν κάποιος έχει την όρεξη να βοηθήσει.

mgiota
Δημοσιεύσεις: 190
Εγγραφή: 15 Σεπ 2009 13:11
Τοποθεσία: Θεσσαλονίκη
Επικοινωνία:

SWFAddress dynamic xml

Δημοσίευση από mgiota » 27 Απρ 2010 15:48

κάποιος που να προγραμματίζει σε flash;

Άβαταρ μέλους
HeRu
Flash Moderator
Δημοσιεύσεις: 800
Εγγραφή: 16 Αύγ 2004 10:49
Επικοινωνία:

SWFAddress dynamic xml

Δημοσίευση από HeRu » 27 Απρ 2010 16:49

Το θέμα είναι ότι το πρόβλημα σου είναι πιο πολύ λογικής και δομής παρά θέμα προγραμματισμού.

Γιαυτό κάποιος που δεν είναι άμεσα εμπλεκόμενος με το πρόγραμμα σου δεν μπορεί να σε βοηθήσει εύκολα.

mgiota
Δημοσιεύσεις: 190
Εγγραφή: 15 Σεπ 2009 13:11
Τοποθεσία: Θεσσαλονίκη
Επικοινωνία:

SWFAddress dynamic xml

Δημοσίευση από mgiota » 27 Απρ 2010 17:20

αυτό κατάλαβα και γω. οπότε θέλει να πειραματιστώ και να δημιουργήσω μια καλή δομή.

Απάντηση

Επιστροφή στο “ActionScript και Flex Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες