YUIConf 2011 Προεγγραφή Bird είναι πλέον ανοικτό

30η Σεπτεμβρίου του 2011 στις 21:31 από Jenny Donnelly | Σε Ανάπτυξης , YUI Εκδηλώσεις | 4 Σχόλια

Νωρίς-πουλί εγγραφή για YUIConf 2011 είναι πλέον ανοιχτή σε Eventbrite! Η φετινή διοργάνωση θα πραγματοποιηθεί στις 2 - 4 Νοεμ του Yahoo! Μεγάλη πανεπιστημιούπολη Αμερική. Είμαστε ενθουσιασμένοι για να σας φέρει μια πλήρη ημέρα των hands-on εργαστήρια κατάρτισης (Τετ) που ακολουθείται από δύο πλήρεις ημέρες της τεχνολογίας μιλά για YUI (Πέμ / Παρ). Οι εγγραφές για το συνέδριο κοστίζει 75 δολάρια αυτό το έτος, με πρώιμο-πουλί τιμή των $ 50. Οι εγγραφές για τα εργαστήρια θα είναι ξεχωριστή από τη διάσκεψη και τις λεπτομέρειες έρχονται σύντομα.

Είμαστε απασχολημένοι παράταξη μεγάλη θεμάτων, συμπεριλαμβανομένων:

  • YUI συνιστώσα βαθιές καταδύσεις, συμπεριλαμβανομένης της κλήσης και Ημερολόγιο
  • YUI σε κινητά περιβάλλοντα
  • Δοκιμές με YUI
  • Πραγματικό κόσμο ιστορίες της μετανάστευσης
  • και πολλά άλλα!

Όπως πάντα, συνεδρίες της διάσκεψης θα είναι μαγνητοσκοπημένο βίντεο-και είναι διαθέσιμο στο YUI Θέατρο και μας κανάλι στο YouTube για να απολαύσουν όλοι.

Ελπίζουμε να σας δούμε εκεί!

(Σημαντικό! Yahoos εσωτερική παρακαλούμε να εγγραφείτε για ένα εισιτήριο των εργαζομένων Yahoo! και παρέχουν την εργασία σας διεύθυνση ηλεκτρονικού ταχυδρομείου.)

Μοιραστείτε και κατ 'επέκταση: Del.icio.us Σελιδοδείκτης με | Digg it! | Reddit!

YUI 3.4.1 είναι τώρα ζουν

27 Σεπτεμβρίου, 2011 στις 2:37 pm από Άλεν Ραμπίνοβιτς | Σε Ανάπτυξη | 8 Σχόλια YUI 3.4.1

Η YUI 3.4.1 σύντομη απελευθέρωση του κύκλου είναι τώρα διαθέσιμη σε CDN και για λήψη , περισσότερο από μια εβδομάδα νωρίς! Εδώ είναι μερικά στιγμιότυπα για αυτήν την έκδοση:

Μπορείτε επίσης να εξετάσετε την περίληψη όλων των αλλαγών που σημειώνεται στα αρχεία ιστορία συστατικό για YUI 3.4.1 καθώς και τον πλήρη κατάλογο των εισιτηρίων που απευθύνονται κατά YUI 3.4.1 ανάπτυξη . Όπως πάντα, θα το εκτιμούσαμε ότι θα καταθέσει κάποιες προτάσεις που μπορεί να έχετε ή ελαττώματα που μπορεί να αποκαλύψει στη βάση δεδομένων του εισιτηρίου μας. Σχόλια για YUI 3.4.1 μπορούν να εισαχθούν στο YUI της βάσης δεδομένων του εισιτηρίου 3 .

Θα θέλαμε επίσης να ανακοινώσω ότι στην επόμενη έκδοση του YUI, DataType.Date, DataType.Number και DataType.XML θα καταργηθεί υπέρ της Y.Date, Y.Number, και Y.XML, αντίστοιχα. Προς τα πίσω συμβατότητα, θα πρέπει να φυλάσσονται για ένα απελευθέρωση, για να δώσει σε όλους την ευκαιρία να περάσουμε.

Α, και κάτι ακόμα: είμαστε σε καλό δρόμο μας στο θέμα της μετάβασης του περιεχομένου Θέατρο YUI στο YouTube . Για ορεκτικά, ελέγξτε διάλεξη σειρά Douglas Crockford του "Crockford τη JavaScript" - με υπότιτλους!

Μοιραστείτε και κατ 'επέκταση: Del.icio.us Σελιδοδείκτης με | Digg it! | Reddit!

Ψηφίστε για YUI στο Open Source Awards Finals

26 Σεπ. 2011 στις 9:21 pm από Jenny Donnelly | Σε Ανάμικτα | 1 σχόλιο

Ευχαριστούμε όλους όσους διορίζονται YUI για τις Packt Publishing Open Source Awards. Ψηφίστε τώρα για YUI το αγαπημένο σας βιβλιοθήκη JavaScript!

Μοιραστείτε και κατ 'επέκταση: Del.icio.us Σελιδοδείκτης με | Digg it! | Reddit!

YUI 3.4.1 PR1 τώρα διαθέσιμη Στις CDN

22 Σεπτεμβρίου, 2011 στις 1:35 pm από Jenny Donnelly | Σε Ανάπτυξη | 1 σχόλιο

YUI 3.4.1 PR1 είναι πλέον διαθέσιμα για τη δοκιμή της κοινότητας και η ανατροφοδότηση. Είναι διαθέσιμο στο CDN Yahoo! στο http://yui.yahooapis.com/3.4.1pr1/build/yui/yui-min.js , και μπορείτε να δείτε τις αλλαγές να τεθούν σε 3.4.1 από τη λίστα των εισιτηρίων που ελέγχθηκαν μέσα για την απελευθέρωση .

Το 3.4.1 έκδοση θα είναι μια μικρότερη bug-fix απελευθέρωσης με ένα μικρότερο κύκλο ανάπτυξης, που έχει προγραμματιστεί για το go-ζουν από τις 5 Οκτωβρίου. Παρακαλούμε σφάλματα αρχείο και παλινδρομήσεις της βάσης δεδομένων εισιτήριο για YUILibrary.com από το πρωί της Δευτέρα 26 Σεπτεμβρίου και έτσι μπορείτε να βεβαιωθείτε ότι όλα τα κρίσιμα ζητήματα που εξετάστηκαν πριν από τη γενική απελευθέρωση. Εάν δεν έχουν αναφερθεί επείγοντα θέματα, θα κυκλοφορήσει 3.4.1 συντομότερο 27 Σεπτεμβρίου.

Μοιραστείτε και κατ 'επέκταση: Del.icio.us Σελιδοδείκτης με | Digg it! | Reddit!

YUI: Ώρες Λειτουργίας Πέμ 15 Σεπτέμβρη

12 Σεπτεμβρίου 2011 στις 9:58 pm από Luke Smith | Σε Ανάπτυξης , Ώρες Λειτουργίας | 2 Σχόλια

MakeNode επέκταση της Satyam

Αν δεν ξέρετε Satyam , θα πρέπει να είναι νέα για YUI. Του όντας ένας πυλώνας της κοινότητας YUI από τις πρώτες ημέρες του YUI 2. Άρθρα του σχετικά με YUIBlog είναι μερικά από τα πιο επιτυχημένα και αναφέρεται σε πηγές για το "πώς να χρησιμοποιούν τη βιβλιοθήκη πραγματικά" περιεχόμενο στυλ. Αν δείτε ότι Satyam έγραψε, αξίζει να το διαβάσει, και κατά πάσα πιθανότητα, μια εκ νέου ανάγνωση και ένα σελιδοδείκτη.

Τον Ιούλιο, τοποθέτησε ένα μεγάλο άρθρο σε μια MakeNode επέκταση Widget που αποσκοπεί στην απλούστευση ορισμένων από τα κοινά πρότυπα που χρησιμοποιούνται κατά την κατασκευή Widgets, και να το καταστήσει ευκολότερο να αποφύγουν τα κοινά λάθη. Η μονάδα έχει έκτοτε προστέθηκε στην Πινακοθήκη και μόλις νωρίτερα σήμερα, τοποθέτησε μια ενημέρωση στην αρχική του άρθρου.

Γι 'αυτό θα πάμε να συζητήσουμε. Τα χαρακτηριστικά, η ιστορία, και οι συλλογισμοί. Εάν έχετε χρησιμοποιήσει την υποδομή συνιστώσα, και ιδίως, Y.Widget , έχετε αντιμετωπίσει πιθανό τουλάχιστον μερικά από τα εμπόδια Satyam που αντιμετωπίζονται με MakeNode . Αυτό πρόκειται να είναι μια καλύτερη γιορτή πρακτικές, έτσι ώστε να σημειωματάριο σας, και τις δικές σας εμπειρίες για να μοιραστείτε.

Ώρα & Λεπτομέρειες

Θα είμαστε σε απευθείας σύνδεση την Πέμπτη δέκα-έντεκα το πρωί PDT.

Γίνετε μέλος στη Συνέλευση

Εγγραφή

Η εγγραφή είναι διαθέσιμη στο YouTube channel των YUILibrary .

Μοιραστείτε και κατ 'επέκταση: Del.icio.us Σελιδοδείκτης με | Digg it! | Reddit!

Υποβολή Συζήτηση για YUIConf 2011

12 Σεπτεμβρίου 2011 στις 15:48 από Jenny Donnelly | Σε Ανάπτυξης , YUI Εκδηλώσεις | Δεν Σχόλια

Αναδείξτε τον κωδικό που έχετε εργαστεί για το μερίδιο ή κάτι που έχετε μάθει, ενώ συνεργάζεται με YUI! Υποβολή πρότασης για Yui-εκδηλώσεις (at) yahoo-inc.com από την Παρασκευή 23 Σεπτεμβρίου του 2011. Να είστε βέβαιος να περιλαμβάνουν:

  • Τίτλος
  • Περιγραφή
  • Προβλεπόμενη κοινό
  • Το όνομά σας
  • Ένα σύντομο βιογραφικό

YUIConf 2011 θα πραγματοποιηθεί 3 Νοεμβρίου και τέταρτη στο Yahoo! της Σάντα Κλάρα, Καλιφόρνια πανεπιστημιούπολη. Η παρουσίασή σας θα πρέπει να διαρκέσει περίπου 45 λεπτά. Θα πρέπει μέχρι 15 λεπτά μετά την παρουσίασή σας για Ε & Α. Ανακοινώστε τα ερωτήματα στα σχόλια, ή στείλτε μας απευθείας στο Yui-εκδηλώσεις (at) yahoo-inc.com.

Μοιραστείτε και κατ 'επέκταση: Del.icio.us Σελιδοδείκτης με | Digg it! | Reddit!

Ενημέρωση: Η "MakeNode" Επέκταση Widget

12 Σεπτεμβρίου 2011 στις 15:18 από Satyam | Σε Ανάπτυξης , YUI Γκαλερί 3 | 8 Σχόλια

Σημείωση συντάκτη: Αυτό το άρθρο αρχικά δημοσιεύτηκε νωρίτερα φέτος . Από τότε, η ενότητα MakeNode έχει δημοσιευθεί στη Συλλογή YUI και έλαβε ορισμένες βελτιώσεις. Σήμερα, το άρθρο αντανακλά όλες τις τελευταίες αλλαγές στο MakeNode.

Στο προηγούμενο άρθρο μου, μια συνταγή για μια YUI 3 Εφαρμογή , μου έδειξε έναν τρόπο να χρησιμοποιεί Y.substitute ως ένα πολύ βασικό επεξεργαστή πρότυπο. Η ιδέα πήρε τη ζωή από εκεί, με εισηγήσεις από τους λαούς της Yui # κανάλι IRC, και έκανα μια επέκταση του widget που είναι διαθέσιμα στο YUI Πινακοθήκη, που ονομάζεται MakeNode . MakeNode δεν είναι ένα γενικό πρότυπο επεξεργαστή και δεν νοείται ως ένα. Από την άλλη πλευρά, είναι στενά συνδεδεμένη με την YUI Widget κατηγορίας ίδρυμα, συμπεριλαμβανομένων και ClassName περίπτωση βοηθοί και διεθνοποίηση. Σε αυτό το άρθρο, θα πάρω το Spinner παράδειγμα και τροποποιήστε το να ακολουθήσει τις οδηγίες από το προηγούμενο άρθρο μου και να χρησιμοποιήσει MakeNode. MakeNode είναι διαθέσιμη ως συστατικό γκαλερί καθώς και την τροποποίηση Spinner συνιστώσα και το παράδειγμα που θα χρησιμοποιηθούν σε αυτό το άρθρο .

Επέκταση συνιστώσα σας

Για να φορτώσετε MakeNode θα πρέπει να περιλαμβάνουν τη μονάδα σε σας YUI().use() δήλωση με την επωνυμία 'gallery-makenode' ή, αν ορίζει μια ενότητα μέσω YUI.add() , να εγγραφεί ως requires πίνακα. Στη συνέχεια, να επεκτείνει το widget σας, μπορείτε να την περιλάβει στο τρίτο επιχείρημα για να Y.Base.create() , όπως αυτό:

  Y.Spinner = Y.Base.create (
      "Spinner",
      Y.Widget,
      [Y.MakeNode],
      {
         / / Μέλη παράδειγμα ...
      },
      {
          / / Στατική μέλη
      }
 )? 

Μπορείτε να προσθέσετε MakeNode μαζί οποιοδήποτε αριθμό κατάλληλων επεκτάσεων για Widget, όπως WidgetParent, WidgetChild, WidgetStdMode, κλπ. MakeNode προσθέτει δύο προστατευόμενες μεθόδους που θα χρησιμοποιηθούν από τον κύριο του έργου, _makeNode και _locateNodes, και θα διαβάζεται από πολλές στατικές ιδιότητες, αν βρεθεί .

Όλα τα μέλη αυτής της επέκτασης είναι είτε προστατευόμενες ή ιδιωτικές, εφόσον προορίζονται να χρησιμοποιηθούν από συνιστώσα του έργου και όχι από την εκτελεστής χρησιμοποιώντας τα εξαρτήματα αυτά, που δεν πρέπει να ενοχλούνται με αυτές. Θυμηθείτε να ελέγξετε την "Προστατευόμενη Show" επιλογή κατά την προβολή της API Docs .

Ορίζοντας το πρότυπο

Το πρώτο πράγμα που θα κάνω συνήθως είναι να καθορίσει το πρότυπο για το στοιχείο σας. Για το Spinner, το πρότυπο μας θα είναι:

  _TEMPLATE: [
     «<input Type="text" title="{s input}" class="{c input}">»,
     «<button Type="button" title="{s up}" class="{c up}"> </ κουμπί>»,
     «<button Type="button" title="{s down}" class="{c down}"> </ κουμπί>"
 ]. Ενταχθούν ('\ n'), 

Το προεπιλεγμένο πρότυπο συνήθως θα ονομάζεται _TEMPLATE και δηλώνονται κατά μήκος τις άλλες στατικές ιδιότητες της κατηγορίας, όπως ATTRS . MakeNode θα χρησιμοποιήσει αυτό το πρότυπο, εάν κανένα άλλο προβλέπεται ρητά. Το πρότυπο είναι κατασκευασμένο από απλή HTML καθώς και μια σειρά από σύμβολα κράτησης θέσης μέσα σε αγκύλες, κάθε κατασκευασμένο από ένα ενιαίο χαρακτήρα (ο κωδικός επεξεργασίας) και ακολουθείται από ένα ή περισσότερα ορίσματα. Τα σύμβολα κράτησης θέσης και αυτό που παράγουμε είναι:

  • {@ attributeName} αποδίδουν αξία, διαμόρφωση

  • {p propertyName} παράδειγμα αξίας του ακινήτου

  • {m methodName arg1 arg2 ….} επιστρεφόμενη τιμή της συγκεκριμένης μεθόδου. Ο κωδικός επεξεργασίας ακολουθείται από το όνομα της μεθόδου και οποιοδήποτε αριθμό των επιχειρημάτων που χωρίζονται με κενά.

  • {c classNameKey} ClassName CSS που παράγεται από την _CLASS_NAMES στατική ιδιοκτησίας (βλ. Το ακίνητο _CLASS_NAMES παρακάτω ενότητα)

  • {s key} string από την strings χαρακτηριστικό, χρησιμοποιώντας key ως υπο-ιδιότητα.

  • {? condition valueIfTrue valueIfFalse } σαν το ?: διαχειριστής JavaScript, για να αξιολογεί valueIfTrue αν η κατάσταση είναι truish, valueIfFalse διαφορετικά.

  • {1 condition valueIfOne valueIfMore } χρησιμοποιείται για την παραγωγή ενικό / πληθυντικό αριθμό λέξεων με βάση την αξία της κατάστασης.

  • {} οποιαδήποτε άλλη τιμή θα πρέπει να αντιμετωπίζονται ακριβώς όπως Y.substitute κάνει.

Για παράδειγμα, {@ value} θα μεταφραστεί σε this.get('value') , ενώ {p value} μεταφράζεται σε this['value'] .

Όταν κράτησης θέσης έχουν επιχειρήματα, όπως {m} , {?} και {1} , συμβολοσειρές πρέπει να περικλείονται σε διπλά εισαγωγικά. Αριθμοί, booleans και null (όλα έχουν εισαχθεί σε χρηματιστήριο) θα πρέπει να αναλυθεί με τους σωστούς τύπους δεδομένων. Τα σύμβολα κράτησης θέσης μπορεί να είναι ένθετα. Το {?} και {1} κράτησης θέσης θα περιέχει συνήθως μια ένθετη κράτησης θέσης για την κατάσταση και πολύ πιθανόν για τις αξίες τους, για παράδειγμα:

  {Σ. έκαστος} {{1} σ. έκαστος "μονάδα" "μονάδες"} 

Αν το ακίνητο qty είναι 1, θα αξιολογήσει την "1 unit" , για 2 ή περισσότερα θα επιστρέψει "2 units" και ούτω καθεξής. Μια πιο εμπεριστατωμένη έκδοση που ασχολούνται με το μηδέν θα ήταν:

  {;  {P} έκαστος "{σελ. έκαστος} {{1} σ. έκαστος" μονάδα "" μονάδες "}" "κανένας"} 

Σημειώστε ότι το αποτέλεσμα της επεξεργασίας των εσωτερικών κράτησης θέσης, αν μια σειρά, πρέπει να περικλείεται σε δικό του σύνολο εισαγωγικά.

Για να συμπεριλάβετε ένα διπλό εισαγωγικό μέσα σε ένα string με, χρησιμοποιήστε \\" , η διπλή αντίστροφη κάθετο που θα απαιτηθεί δεδομένου ότι JavaScript θα ερμηνεύσει έναν ενιαίο και απορρίπτει, πριν να φτάσει στο MakeNode επιτρέπεται μόνο διπλά εισαγωγικά?. MakeNode δεν χρησιμοποιεί eval() έτσι ο parser είναι περιορισμένη, αλλά ασφαλής. Οτιδήποτε όμως αριθμούς, null , booleans και διπλά εισαγωγικά θα πρέπει να αγνοηθεί.

Το {?} κράτησης θέσης είναι επίσης βολικό για χρήση με πλαίσια ελέγχου και κουμπιά επιλογής. Μπορεί να χρησιμοποιηθεί για την παραγωγή το string "checked" , ανάλογα με την αξία της αλήθειας κωδικός χρήσης επεξεργασίας που ακολουθεί. Έτσι, <input type="checkbox" {? {m getLength} "checked" ""}/> <input type="checkbox" {? {m getLength} "checked" ""}/> θα παράγει σημαντική κουτάκι εάν το getLength τίποτα μέθοδος επιστρέφει, αλλά μηδέν.

Για το {c} κράτησης θέσης, πρέπει να έχουμε ένα _CLASS_NAMES περιουσία ορίζεται.

Περαιτέρω κράτησης θέσης μπορούν να προστεθούν σε MakeNode με την προσθήκη τους στο _templateHandlers κατακερματισμού.

Το ακίνητο _CLASS_NAMES

Μαζί με την ATTRS και _TEMPLATE στατικές ιδιότητες, μπορούμε να ορίσουμε μια _CLASS_NAMES στατική ιδιότητα η οποία επισημαίνει μια σειρά από χορδές. Κάθε μία από αυτές τις χορδές θα χρησιμοποιείται για την παραγωγή ClassName. Έτσι _CLASS_NAMES: ['input'] θα παράγει το ClassName "yui3-spinner-input" . Αυτές οι classNames αποθηκεύονται σε μια ιδιοκτησία παράδειγμα this._classNames . Η {c input} κράτησης θέσης στο πρότυπο παραπάνω θα αντικατασταθούν από "yui3-spinner-input" . Καλώ τις χορδές που απαριθμούνται στο _CLASS_NAMES , όπως 'input' , τα «κλειδιά ClassName», αφού μπορεί να χρησιμοποιηθεί ως κλειδί για να αναφερθούν στο ίδιο ClassName ή τα στοιχεία που περιέχουν τις classNames, όπως θα δούμε αργότερα.

Μπορείτε να χρησιμοποιήσετε το _CLASS_NAMES ιδιότητα να δημιουργούν οποιοδήποτε αριθμό classNames, αν τα χρησιμοποιήσετε στο πρότυπο ή όχι. Μπορείτε να φτάσετε ακόμα τα επιπλέον classNames μέσα από this._classNames . Η ClassName παράγεται χρησιμοποιώντας την yui3 πρόθεμα ακολουθούμενο από την τιμή της NAME στατική ιδιοκτησία γύρισε πεζά, και στη συνέχεια το string που αναφέρονται στο _CLASS_NAMES (αυτό το τελευταίο δεν θα μετατραπεί πεζά), όλα χωρίζονται με παύλες. Η _classNames κατακερματισμού θα περιέχουν επίσης τα classNames για την boundingBox και contentBox , η πρώτη στο πλαίσιο του "boundingBox" κλειδί και το δεύτερο στο πλαίσιο του "content" κλειδί. Widget αναθέτει στην boundingBox οι classNames προέρχεται από τις αξίες της NAME περιουσίας καθενός από τα τμήματα της αλυσίδας κληρονομιά, ξεκινώντας με yui3-widget . MakeNode καταστήματα σε this._classNames μόνο το top-πλέον ClassName για την boundingBox .

Εάν η μονάδα WidgetStdMod φορτώνεται, MakeNode θα δημιουργήσει επίσης τις καταχωρήσεις για τους HEADER , BODY και FOOTER τμήματα με τις ίδιες κλειδιά, που είναι και οι σταθερές που ορίζονται στην ίδια ενότητα.

Αν ένα στοιχείο είναι αρκετά μακριά από τα επίπεδα Widget, όπως SuperSpecialSpinner κληρονομεί από SuperSpinner που κληρονομεί από Spinner που κληρονομεί από το Widget, και αν κάποια ή όλες τους έχουν _CLASS_NAMES ιδιότητες που ορίζονται, θα παράγει MakeNode classNames για όλα αυτά και να τα αποθηκεύετε σε this._classNames . Δεν χρειάζεται να περιλαμβάνουν σε κάθε επίπεδο, τα ονόματα που έχουν ήδη δηλωθεί στα προηγούμενα επίπεδα. Στην πραγματικότητα, είναι καλύτερα να μην δεδομένου ότι οι classNames που παράγονται σε κάθε επίπεδο, θα χρησιμοποιήσει την τιμή του NAME ακινήτου αυτού του επιπέδου. Έτσι, σε SuperSpecialSpinner , {c input} θα έχουν ως αποτέλεσμα "yui3-spinner-input" και όχι "yui3-superspecialspinner-input" και έτσι θα κρατήσει αρχείο CSS σας εξακολουθεί να ισχύει.

Το {s} κράτησης θέσης

Widget έχει strings χαρακτηριστικό διαμόρφωσης ορίζεται, αν και δεν έχει προετοιμαστεί με οποιαδήποτε τιμή. Αυτό το χαρακτηριστικό έχει σκοπό να κρατά χορδές που είναι ορατά (ή, μέσω της ανάγνωσης οθόνης, διαβάστε) από το χρήστη. Είναι σημαντικό ότι ποτέ δεν συμπεριλαμβάνει ορατά χορδές άμεσα στο πρότυπο. Αυτό δεν είναι μια απαίτηση της MakeNode - ποτέ δεν ήταν μια καλή ιδέα. Όλες οι σειρές που πρόκειται να δει ή να διαβάσει από το χρήστη πρέπει πάντα να τοποθετείται στο strings χαρακτηριστικό. Η strings του χαρακτηριστικού περιέχει κατακερματισμού, όπου κάθε ατομικό κείμενο βρίσκεται από το κλειδί του. Η συνιστώσα Spinner έχει τις ακόλουθες χορδές, το οποίο μπορείτε να δείτε που χρησιμοποιείται στο πρότυπο παραπάνω.

  χορδές: {
     τιμή: {
         Είσοδος: "Πατήστε το βέλος πάνω / κάτω πλήκτρα για μικρές αυξήσεις, σελίδα πάνω / κάτω για μεγάλες προσαυξήσεις.»,
         μέχρι: "Αύξηση",
         κάτω: "μείωση"
     }
 }, 

Το καλύτερο μέρος για να γίνει αυτό είναι το στοιχείο σας μπορεί να εντοπιστεί και σε άλλες γλώσσες πολύ εύκολα από προγραμματιστές που χρησιμοποιούν το προϊόν σας. Όταν δημιουργείτε μια εμφάνιση του Spinner, μπορείτε να κάνετε:

  var mySpinner = νέα Spinner ({χορδές: Y.Intl.get («σβούρα»)})? 

Ρύθμιση των ρυθμίσεων χαρακτηριστικό strings με αυτό τον τρόπο αντικαθιστά τις προεπιλεγμένες strings τιμών με εκείνους από το αρχείο γλωσσικών πόρων χρησιμοποιώντας τη γλώσσα που ορίζεται προηγουμένως. Το {s} κράτησης θέσης έχει πρόσβαση στις χορδές που αποθηκεύονται στο strings χαρακτηριστικό, είτε αυτοί προεπιλογή ή τα μεταφρασμένα αυτά, αν έχει οριστεί. Το {s xxxx} κράτησης θέσης είναι σχεδόν σα να χρησιμοποιείς {@ strings.xxxx} εκτός από το ότι οι τοπικές χορδές αντικατάσταση μπορεί να έχει κράτησης θέσης που θα υποστούν περαιτέρω επεξεργασία. Αυτό είναι σημαντικό για τις μεταφράσεις από συντακτική σειρά διαφέρει από γλώσσα σε γλώσσα και αυτό επιτρέπει Αναδιατύπωση του κειμένου, συμπεριλαμβανομένων της κράτησης θέσης για να ταιριάζουν σε κάθε γλώσσα. Χορδές μπορούν επίσης να προσεγγιστούν με {@ strings.xxxx.yyyy.zzzz} , η οποία θα επιτρέψει την πρόσβαση σε strings ένθετο βαθύτερα και θα αποτρέψει την περαιτέρω αντικαταστάσεις. Άγκιστρα μπορούν να συμπεριληφθούν σε ένα κείμενο με τη χρήση {LBRACE} και {RBRACE} ως σύμβολα κράτησης θέσης.

Χρησιμοποιώντας _makeNode σε renderUI

Χρησιμοποιούμε το πρότυπο για τη δημιουργία της σήμανσης για το συστατικό μας. Για να γίνει αυτό, μπορούμε να ονομάσουμε MakeNode του _makeNode μέθοδο, όπως αυτή:

  renderUI: λειτουργία () {
     . this.get («contentBox») προσάρτησης (this._makeNode ())?
 }, 

Αυτό θα συμπληρώσουν το contentBox του widget μας με τη σήμανση από την επεξεργασία του προτύπου. Η _makeNode μέθοδος επιστρέφει ένα παράδειγμα της Y.Node που μπορεί να επισυνάπτονται ή να τοποθετηθεί οπουδήποτε ή απλά κρατούνται για μεταγενέστερη χρήση. Δεν επιστρέφει ένα string, που παράγει μια Node παράδειγμα. (Εάν χρειάζεστε μια σειρά και δεν κόμβου, μπορείτε να χρησιμοποιήσετε το _substitute μέθοδο, η οποία απαιτεί να περάσει σε ένα πρότυπο.)

Η _makeNode μέθοδος παίρνει δύο προαιρετικά ορίσματα: μια αναφορά σε ένα πρότυπο και ένα αντικείμενο να συμπληρώσετε κράτησης θέσης, όπως Y.substitute κάνει. Στο απλό παράδειγμα Spinner μας υπάρχει ένα ενιαίο πρότυπο για όλη την widget widgets αλλά και άλλες μπορεί να απαιτεί κομμάτια φτιαγμένα από διάφορα πρότυπα. Στην περίπτωση αυτή, θα καλέσετε συνήθως _makeNode χωρίς επιχειρήματα για το κύριο μέρος και καλούν για άλλη μια φορά με διαφορετικά πρότυπα για να συμπληρώσετε τα επιπλέον εξαρτήματα. Το παράδειγμα αυτό περιέχει renderUI μέθοδο:

  renderUI: λειτουργία () {
     var πεδίων this._makeNode = ()?
     this.each (λειτουργία (θέση) {
         fieldset.appendChild (this._makeNode (MultipleTemplates.RADIO_TEMPLATE, στοιχείο))?
     }, Αυτή)?
     this.get («contentBox») προσάρτησης (πεδίων).?
 } 

Η πρώτη πρόσκληση για _makeNode επιστρέφει Node παράδειγμα αποθηκεύεται στη μεταβλητή fieldset . Η συνιστώσα του δείγματος επεκτείνεται επίσης και με Y.ArrayList έτσι η RADIO_TEMPLATE θα γεμίσει με τιμές που λαμβάνονται από τα στοιχεία που είναι αποθηκευμένα στη λίστα array και οι προκύπτουσες κόμβοι που επισυνάπτεται στην fieldset πριν από την τελική επισυνάπτεται στην contentBox . Οι ειδικές κράτησης θέσης, όπως {@} ή {p} θα εξακολουθεί να παραπέμπει σε χαρακτηριστικά ή ιδιότητες με το κύριο αντικείμενο. Τα ένθετα στοιχεία θα υποβληθούν σε επεξεργασία όπως Y.substitute θα.

Η μέθοδος _locateNodes

MakeNode παρέχει περαιτέρω μια _locateNodes μέθοδο η οποία θα προσπαθήσει να εντοπίσει όλα τα στοιχεία με τα classNames δηλώνονται _CLASS_NAMES . Για να εντοπίσετε συγκεκριμένα στοιχεία μπορείτε να περάσετε οποιοδήποτε αριθμό των κλειδιών ClassName, διαφορετικά, _locateNodes προσπαθεί όλα αυτά. Για κάθε στοιχείο που βρίσκεται κάθε ClassName, _locateNodes θα παράγει μια ιδιωτική ιδιοκτησία παράδειγμα, χρησιμοποιεί το πρόθεμα υπογράμμισης ακολουθούμενο από το όνομα του κλειδιού και το "Node" κατάληξη. Έτσι, στο παράδειγμά μας, Spinner, _locateNodes θα δημιουργήσει τις ιδιότητες _inputNode , _upNode και _downNode . Εάν πολλά στοιχεία έχουν την ίδια ClassName, _locateNodes θα επιστρέψει μια αναφορά στην πρώτη από αυτές. Αν ένα στοιχείο δεν έχει βρεθεί, δεν μεταβλητή θα δημιουργηθεί.

Στο συστατικό Spinner χρησιμοποιούμε _locateNodes μετά τη δημιουργία της σήμανσης:

  renderUI: λειτουργία () {
     . this.get (CBX) προσάρτησης (this._makeNode ())?
     this._locateNodes ()?
 }, 

Η στατική _EVENTS ιδιοκτησίας

Ένα περαιτέρω ιδιοκτησίας μπορούν να καθοριστούν σύμφωνα με τις γραμμές του _TEMPLATE και _CLASS_NAMES και αυτό είναι _EVENTS . _EVENTS θα περιέχει ένα hash που αποτελείται από τα κλειδιά το όνομα της κλάσης, το καθένα περιέχει ένα κατακερματισμού των τύπων εκδήλωσης και τις μεθόδους για να τους χειριστεί. Δεν εξηγείται καλύτερα με ένα παράδειγμα:

  _EVENTS: {
     Είσοδος: 'αλλαγή', / / ​​κλήσεις this._afterInputChange
     boundingBox: [
         {
             Τύπος: «κλειδί»,
             ΦΝ: «_onDirectionKey ', / / ​​this._onDirectionKey κλήσεις
             args: ((Y.UA.opera) "κάτω"!; "τύπου:") + "38, 40, 33, 34"
         },
         «MouseDown '/ / κλήσεις this._afterBoundingBoxMousedown
     ],
     εγγράφου: «MouseUp ', / / ​​this._afterDocumentMouseup κλήσεις,
     Υ: «broadcastingObject: someEvent '/ / κλήσεις αυτό [" _afterYBroadcastingObject: someEvent "]
 }, 

_EVENTS είναι ένα αντικείμενο (ένα hash) με οποιοδήποτε αριθμό των εγγραφών. Τα ονόματα των ιδιοτήτων, δηλαδή, τα κλειδιά του κατακερματισμού, να εντοπίσει τους κόμβους των οποίων οι εκδηλώσεις θα ακούσουμε. Είναι οι ίδιοι τα κλειδιά ClassName ορίζεται στο _CLASS_NAMES . Υπάρχουν πολλά επιπλέον ειδικά πλήκτρα:

  • "boundingBox" θα αναφερθώ στο ίδιο το πλαίσιο οριοθέτησης.

  • "document" αναφέρεται στο έγγραφο που περιέχει αυτό το widget.

  • "THIS" αναφέρεται στο ίδιο το widget

  • "Y" αναφέρεται στο Y παράδειγμα.

Εάν το widget έχει επεκταθεί με WidgetStdMod καθώς, η πλήκτρα HEADER , BODY και FOOTER θα αναφερθώ σε αυτούς τους τομείς, δεδομένου ότι θα είναι διαθέσιμα στην _classNames κατακερματισμού. Το JavaScript δεν χρειάζεται τα πλήκτρα να αναφέρεται αν είναι έγκυρα αναγνωριστικά έτσι κανένα από τα παραπάνω πρέπει να αναφέρονται.

Η _EVENTS ακίνητο μετά την επεξεργασία των renderUI , bindUI και syncUI έχουν κληθεί μεθόδους, ώστε το widget αναμένεται να έχει ήδη εισαχθεί στο σώμα του εγγράφου, αλλιώς το "document" αναγνωριστικό θα αποτύχει.

Για καθένα από αυτά τα στοιχεία προκύπτει ότι υπάρχει ένα αναγνωριστικό γεγονός ή μια σειρά από αναγνωριστικά συμβάντος. Ένα συμβάν μπορεί να προσδιοριστεί από το είδος της εκδήλωσης για να ακούσετε ή ένα αντικείμενο με περισσότερες λεπτομέρειες. Από προεπιλογή, MakeNode θα χρησιμοποιήσει ως ακροατή μια μέθοδος που ονομάζεται με το "_after" πρόθεμα ακολουθούμενο από το αναγνωριστικό στοιχείο με πρώτο χαρακτήρα της κεφαλαιοποιούνται ακολουθούμενος από τον τύπο με την πρώτη εκδήλωση του χαρακτήρα κεφαλαιοποιούνται. Η παραπάνω μπλοκ κώδικα δείχνει τις μεθόδους που καλούνται για κάθε εκδήλωση.

Ένα αναγνωριστικό περίπτωση μπορεί επίσης να είναι ένα αντικείμενο με ιδιότητες type , fn και args . Ο type είναι υποχρεωτική και δείχνει το είδος της εκδήλωσης που άκουσαν. Το fn ιδιοκτησία δίνει το όνομα της μεθόδου που θα ακούσετε το γεγονός αποφεύγοντας έτσι την αυτόματη ονομασία. Από _EVENTS είναι ένα στατικό ιδιοκτησία, δεν έχει πρόσβαση σε this , ώστε να μην μπορεί να πάρει μια πραγματική αναφορά στη μέθοδο, μόνο το όνομά του. Η args επιχείρημα μπορεί να χρησιμοποιηθεί για να περάσει περαιτέρω επιχειρήματα για τον καλούντα, όπως με το key γεγονός που επιβάλλει τον προσδιορισμό κλειδιά.

MakeNode θα χρησιμοποιήσει Node.delegate να ακούσετε εκδηλώσεις για τα στοιχεία εντός του boundingBox , ενώ θα χρησιμοποιήσει Node.after να ακούσετε τα γεγονότα από την boundingBox και το σώμα του εγγράφου. Θα χρησιμοποιήσει this.after να ακούσετε τα γεγονότα υπό την THIS κλειδί και Y.after για τους ακροατές που παρατίθενται στην Y κλειδί. Όλες οι εκδηλώσεις ακούσει μετά τη χρήση τους ακροατές περίπτωση, δεδομένου ότι έχουν σκοπό να κάνουν το widget ανταποκρίνονται στα γεγονότα, να μην φιλτράρουν τη συμπεριφορά του αντικειμένου που τους απολύει, ώστε σε καμία περίπτωση τα γεγονότα αυτά μπορεί να προληφθεί ή να σταματήσει. (Σημείωση: ακούγοντας το key σε κάθε περίπτωση ένθετων στοιχείο λειτουργεί μόνο με 3.4.0pr1 έκδοση και πάνω, από αντιπροσωπεία του key περίπτωση δεν ήταν διαθέσιμες πριν από όλα τα άλλα χαρακτηριστικά τους λειτουργούν με προηγούμενες εκδόσεις, καθώς και.).

Οι _EVENTS δηλώσεις αυτές είναι σωρευτικές, όταν συστατικά κληρονομούν ένα από το άλλο. Κάθε τάξη στην αλυσίδα κληρονομιάς θα έχει το δικό του _EVENTS δήλωση υποβάλλεται σε χωριστή επεξεργασία.

Η στατική _ATTRS_2_UI ιδιοκτησίας

Εκδηλώσεις πάρει δύο κατευθύνσεις, από το περιβάλλον εργασίας προς τον γονέα και από τη συνιστώσα του UI. Η πρώτη ασχολείται η _EVENTS ιδιοκτησίας. Έπειτα, υπάρχουν τα γεγονότα που τροφοδοτούνται από τις αλλαγές αποδίδουν αξία, που πρέπει να αντανακλάται στο περιβάλλον εργασίας χρήστη. Όπως ανέφερα στο προηγούμενο άρθρο, όταν υπάρχουν δευτερογενείς επιπτώσεις από την αλλαγή ένα χαρακτηριστικό ρύθμισης, θα πρέπει να αντιμετωπιστούν από τους ακροατές περίπτωση αλλαγής, όχι από την προαιρετική setter μέθοδο του χαρακτηριστικού, το οποίο πρέπει να ασχολείται μόνο με την ομαλοποίηση της αξίας που έχουν τεθεί. Το UI θα πρέπει να αντικατοπτρίζουν την εξέλιξη της διαμόρφωσης των χαρακτηριστικών, το πρώτο syncUI , όταν με τις οποίες ξεκινά και στη συνέχεια σε κάθε περίπτωση αλλαγής χαρακτηριστικών. Για το τελευταίο, πρέπει να επισυνάψετε μια περίπτωση ακροατή, το οποίο θα μπορούσατε να κάνετε συνήθως σε bindUI . Widget παρέχει ήδη ένα μηχανισμό για να κάνουμε αυτή την απλή, την οποία περιέγραψα στα σχόλια του προηγούμενου άρθρου.

Widget χρησιμοποιεί τα ακίνητα παράδειγμα _UI_ATTRS που περιέχει ένα αντικείμενο με δύο ακόμη ιδιότητες, SYNC και BIND . Κάθε ένα από αυτά είναι μια σειρά αναγράφονται τα ονόματα των χαρακτηριστικών διαμόρφωσης πρέπει να συγχρονιστεί αρχικά και στη συνέχεια να ακούσει, προκειμένου να διατηρηθεί το περιβάλλον εργασίας που αντανακλούν τις τρέχουσες τιμές. Widget αναμένει κάθε μία από αυτές τις συμμετοχές να έχουν μια μέθοδο που συνδέονται με αυτό, το όνομά του από το όνομα του χαρακτηριστικού πρόθεμα _uiSet με τον πρώτο χαρακτήρα του ονόματος χαρακτηριστικό μετατρέπεται σε κεφαλαία για να έχουν το όνομα της μεθόδου στη σωστή περίπτωση καμήλα. Έτσι, εάν "value" είναι εισηγμένη σε κανένα από τα _UI_ATTRS συστοιχίες (είτε SYNC ή BIND ), Widget θα περιμένατε να βρείτε μια _uiSetValue μέθοδο. Αυτή η μέθοδος θα λάβουν δύο επιχειρήματα, η value που καθορίζεται και το src της αλλαγής. Αυτός είναι ο κώδικας για Spinner μας _uiSetValue μέθοδο:

  _uiSetValue: λειτουργία (αξία, SRC) {
     αν (SRC === UI) {
         επιστροφή?
     }
     this._inputNode.set (ΑΞΙΑ, this.get (διαμορφωτή) (αξία))?
 }, 

Όλα τα κεφαλαία αναγνωριστικά που βλέπετε σε αυτό το κομμάτι του κώδικα αντιστοιχούν σε σταθερές συμβολοσειράς δηλώνεται πουθενά αλλού, ώστε να επιτραπεί η YUI συμπιεστή για να κάνει τη δουλειά του καλύτερα. Η μέθοδος, βασικά, θέτει την value χαρακτηριστικό HTML στο <input> κουτί με τη νέα σειρά αξίας, μετά τη διαμόρφωσή του. Η αναφορά στο κουτάκι δόθηκε από _locateNodes . Η src επιχείρημα αρχικά ελέγχονται για να διαπιστωθεί αν ορίσετε την τιμή της συμβολοσειράς 'ui' . Αν είναι έτσι, δεν θα αναληφθεί δράση. Αυτό γίνεται για να αποφευχθεί η ατελείωτη βρόχους. Αν ο χρήστης εισάγει κάτι στο κουτί, η αξία της θα πάει στην value διαμόρφωση χαρακτηριστικό το οποίο στη συνέχεια θα βάλει φωτιά σε ένα valueChange εκδήλωση, η οποία θα πάρει _uiSetValue ονομάζεται οποία, εάν δεν ελεγχθεί, θα πάμε στη συνέχεια και να αλλάξετε την τιμή του πλαισίου εισαγωγής, η οποία ενεργοποιούν την όλη διαδικασία ξανά. Έτσι, σε _uiSetValue , αν γνωρίζουμε ότι η αλλαγή έρχεται από το περιβάλλον εργασίας, δεν κάνουμε τίποτα και έτσι σπάσει το βρόχο. Ωστόσο, αυτό απαιτεί ένα άλλο κομμάτι του κώδικα αλλού. Στο ακροατή για την εκδήλωση DOM, όταν θέτουμε το χαρακτηριστικό διαμόρφωση, χρησιμοποιούμε το τρίτο προαιρετικό όρισμα στην set, όπως αυτό:

  _afterValueChange: λειτουργία (EV) {
     this.set (ΑΞΙΑ, ev.newVal, {src: UI})?
 } 

Είναι στο χέρι μας να εξασφαλίσει ότι οι αλλαγές που προέρχονται από το UI είναι σημαία έτσι και στη συνέχεια, ελέγξτε ότι η ίδια σημαία και να αποφύγετε τους βρόχους. Μη χρησιμοποιείτε το αναγνωριστικό src κατά τον καθορισμό της τιμής του χαρακτηριστικού και όχι source η οποία δεν θα αναγνωρίζονται.

Με όλα αυτά είπε, δεν έχω μιλήσει ακόμα με τη στατική ακίνητο _ATTRS_2_UI αναφέρονται στην κλάση του τμήματος αυτού. Δεδομένου ότι οι παρατηρήσεις σε προηγούμενες εκθέσεις του άρθρου μου (με τις γκάφες που έκανα σε αυτά), εξασφαλίζοντας ότι όλες οι ιδιότητες που επηρεάζουν το περιβάλλον εργασίας που αναφέρονται σωστά είναι κάπως μπερδεμένη. Ποτέ δεν θα πρέπει να προετοιμαστεί _UI_ATTRS από το μηδέν από το Widget περιλαμβάνει ήδη ένα σωρό χαρακτηριστικά και αυτά θα χαθούν. Θα πρέπει να ενώσετε τα νέα ονόματα χαρακτηριστικό πάνω από τις ήδη υπάρχουσες, που είναι κάπως δύσκολο να θυμηθεί πώς να το κάνουμε σωστά. Για να γίνει απλό, MakeNode θα διαβάσει από τη στατική ιδιοκτησία _ATTRS_2_UI και να κάνουμε ότι αλληλουχία για εσάς. Θα ενώσετε όλες αυτές τις λίστες από κάθε κατηγορία στην αλυσίδα κληρονομικότητας έτσι σε κάθε επίπεδο κάθε τάξη μπορεί να χειριστεί τις δικές του ιδιότητες. Στο Spinner, έχουμε:

  _ATTRS_2_UI: {
     BIND: ΑΞΙΑ,
     SYNC: ΑΞΙΑ
 }, 

MakeNode θα δεχτεί και τα δύο μια σειρά από ονόματα ή ένα ενιαίο όνομα του χαρακτηριστικού, όπως στην προκειμένη περίπτωση.

Το ερώτημα που τίθεται φυσικά, γιατί δύο λίστες, μία για την άλλη δεσμευτική για το συγχρονισμό; SYNC χρησιμοποιείται για πρώτη φορά γύρω, μετά τις renderUI και bindUI μεθόδους, εφόσον υπάρχουν, καλούνται και πριν syncUI , ενώ εκείνες που αναφέρονται στο BIND θα δεσμεύεται να τα αντίστοιχα χαρακτηριστικά για αργότερα τις αλλαγές. Αρκετά συχνά η SYNC συστοιχία έχει λιγότερες καταχωρίσεις από το BIND λίστα και αυτό οφείλεται στο γεγονός ότι το πρότυπο για το συστατικό μπορεί να έχουν ήδη την ίδια προεπιλεγμένη τιμή ως το χαρακτηριστικό διαμόρφωσης και δεν υπάρχει καμία ανάγκη να κάνει μια αρχική συγχρονισμού. Έτσι, αν η προεπιλεγμένη τιμή για την value χαρακτηριστικό διάταξης είναι ένα κενό string και η <input> στοιχείο στο πρότυπο δεν έχει καμία value χαρακτηριστικό, τότε δεν υπάρχει ανάγκη να συγχρονιστούν με την εκκίνηση.

Χαρακτηριστικά αναφέρονται στο BIND θα έχουν τους _uiSet Xxxx μεθόδους που καλούνται σε κάθε τάξη, όπως χαρακτηριστικά μπορεί να ρυθμιστεί σε οποιαδήποτε σειρά. Χαρακτηριστικά αναφέρονται στο SYNC θα κληθεί μία φορά στην σειρά με την οποία παρατίθενται με εκείνα των προγόνων πριν από τους κληρονόμους τους, έτσι αν κάποιος εξαρτάται από την άλλη (την οποία δεν θα έπρεπε), η σειρά μπορεί να είναι σημαντικό.

MakeNode θα ελέγχουν για διπλές καταχωρήσεις σε οποιαδήποτε από αυτές τις σειρές. Εάν κάποιος εμφανιστεί, αυτό σημαίνει ότι η κλάση μας κληρονομεί συστατικό ήδη χειρίζεται από το χαρακτηριστικό αυτό και κάθε νέα δήλωση, πιθανότατα, θα υπερβούμε το _uiSet Xxxx χειριστή γι 'αυτό. Παρεμπιπτόντως, MakeNode ελέγχει, επίσης, για τις διπλές εγγραφές στο _CLASS_NAMES , η οποία μπορεί επίσης να προκαλέσει σύγκρουση σε ορισμένες, αν όχι όλες, οι περιστάσεις. MakeNode θα γράψει ένα μήνυμα στο αρχείο καταγραφής για κάθε τέτοιο σφάλμα.

Το ακίνητο _PUBLISH

Τέλος, η _PUBLISH στατική ακίνητο θα καταγράψει τα γεγονότα εκείνα που πρέπει να δημοσιεύονται. Περιέχει ένα hash χρησιμοποιώντας το όνομα της εκδήλωσης, όπως και τα πλήκτρα του αντικειμένου κυριολεκτική του ιδιότητες διαμόρφωσης των αξιών της. Η Επιτροπή θα δημοσιεύσει όλα τα γεγονότα που αναφέρονται στο εν λόγω ακίνητο σε όλη την αλυσίδα κληρονομικότητας. Το ίδιο το όνομα του γεγονότος μπορούν να δημοσιεύονται σε μια τάξη και σε κάθε τάξη κληρονομεί από αυτό, το οποίο θα κάνει τα χαρακτηριστικά διαμόρφωσης αργότερα αυτοί αντικαθιστούν αυτούς των παλιών. Για παράδειγμα, ίσως θέλετε να κάνετε μια υπάρχουσα εκπομπή εκδήλωση σε παγκόσμιο επίπεδο. Ακριβώς όπως με το _EVENTS ιδιοκτησίας, δεδομένου ότι _PUBLISH είναι ένα στατικό ιδιοκτησίας, χωρίς πρόσβαση σε this , κατά τον καθορισμό των λειτουργιών, είναι το όνομα της μεθόδου, ως συμβολοσειρά, η οποία πρέπει να δοθεί.

Συμπέρασμα

MakeNode παρέχει ένα πολύ απλό επεξεργαστή πρότυπο, με τη λειτουργικότητα που είναι στενά συνδεδεμένη με την κατηγορία θεμέλιο Widget. Παρέχει, επίσης, μεθόδους βοηθός για τη δημιουργία classNames να χρησιμοποιηθούν στο πρότυπο και να χρησιμοποιήσει αυτά τα ονόματα για να εντοπίσετε και να παραπέμψει στις δημιουργήθηκε κόμβους. Παρέχει επίσης τα μέσα για να συνδέσετε τα γεγονότα που δημιουργούνται τόσο από το UI και το ίδιο το στοιχείο και να συνδεθούν με κάθε μέθοδο. Κάνει όλα αυτά τα πράγματα, φροντίζοντας να σεβαστούν την αλυσίδα κληρονομίας κατ 'ευθείαν επάνω στο Widget και οποιοδήποτε επίπεδο των τάξεων μπορείτε να ορίσετε.

Δεν προβλέπει για απολύτως όλες τις δυνατότητες, αλλά καλύπτει μια μεγάλη ποικιλία από αυτά. Παρ 'όλα αυτά, δεν σας εμποδίζει από την προσθήκη επιπλέον λειτουργικότητα. Μπορεί σπάνια να χρειαστεί να γράψετε ένα bindUI ή syncUI μέθοδο αν χρησιμοποιείτε την κόλλα που παρέχονται από MakeNode, αλλά μπορείτε να το κάνετε, αφού MakeNode δεν τα χρησιμοποιούν.

Ως μπόνους σε όσους είχαν την υπομονή να διαβάσουν σύνολο κουμπί αυτής της στιγμής, έχω επίσης να τροποποιηθούν Anthony παδέλα των συστατικών γκαλερί και έκανε ένα ακορντεόν και εξαρτήματα TimeSpinner, όλα τα διαθέσιμα στην Πινακοθήκη .

Satyam Περίπου ο συντάκτης: Ντάνιελ Barreiro (ψευδώνυμο Satyam) έχει εδώ και αρκετό καιρό. Η ENIAC έκλεισε την ημέρα πριν γεννήθηκε, έτσι ώστε έχασε, αλλά δεν έχει χάσει πολύ από τότε. Έχει είχαν την ευκαιρία να διάτρητες κάρτες, το πρόγραμμα 6502 μάρκες (θυμηθείτε το Apple II;), μια δική TRS-80 και να δείτε μερικά φανταστικά κομμάτια του εξοπλισμού που λειτουργεί στη γενέτειρά του, την Αργεντινή που μπορεί να ήταν σε μουσεία και αλλού. Όταν η παγκοσμιοποίηση άνοιξε τις πόρτες στον κόσμο, τότε μόλις και μετά βίας μπορούν να χρησιμοποιηθούν τα αγγλικά του (συν ένα δίπλωμα του Ηλεκτρολόγου Μηχανικού) τον έβαλε στην πορεία σταδιοδρομίας, το οποίο κατέληγε σε μια 5-ετή δουλειά στο πίσω μέρος του Bay Area κατά τις ημέρες των Μωσαϊκό NCSA. Εντελώς intrigued από τα αστεία squiggles ένας φίλος του, έγραψε σε απλό επεξεργαστή κειμένου του, γεμάτο <'s και> του, έφτασε μέχρι την εκμάθηση αρκετά για τον κόσμο της μηχανικής frontend. Ήταν ένα μακρύ ταξίδι από COBOL και Fortran. Τώρα ζει αρκετά ευτυχώς ημι-συνταξιούχος στη Μεσόγειο κοντά στην ακτή της Βαρκελώνης, στην Ισπανία.

Μοιραστείτε και κατ 'επέκταση: Del.icio.us Σελιδοδείκτης με | Digg it! | Reddit!

Επόμενη Σελίδα »
Φιλοξενείται από το Yahoo!

Πνευματικά δικαιώματα © 2006-2012 Yahoo! Με επιφύλαξη παντός δικαιώματος. Πολιτική απορρήτου - Όροι Υπηρεσίας

Κινούμενο από WordPress για το Yahoo! Web Hosting .