Aceasta este ultima parte a tutorialului din trei părți, care vă va învăța cum să creați o aplicație de manager de contacte în JavaScript, folosind CanJS și jQuery. Când ați terminat cu acest tutorial, veți avea tot ce aveți nevoie pentru a vă crea propriile aplicații JavaScript folosind CanJS!
În partea a doua, ați creat vizualizările și controalele necesare pentru a afișa categorii, a ajutat la modelul Model.List, a utilizat rutarea pentru a filtra contactele și a modifica EJS pentru a profita de legarea live.
În această parte a tutorialului, veți:
a lua legatura
ControlVeți adăuga la fișierele sursă din părțile unu și doi, deci dacă nu ați făcut-o deja, prindeți-le pe prima și la două.
În prima parte, contactView.ejs
plasat fiecare proprietate a unui contact este într-o etichetă de intrare. Pentru a actualiza un contact atunci când aceste intrări se modifică, va trebui să adăugați niște handlers de evenimente la a lua legatura
Control. Adăugați acest cod contacts.js
în interiorul Contacte
Control:
'.contact de intrare focusout': funcție (el, ev) this.updateContact (el); , ".contact select input": funcția (el, ev) if (key.file ============================================================================================ this.updateContact (el), actualizareContact: functie (el) var contact = el.closest ('contact') date ('contact'); contact.attr (el.attr ('nume'), el.val ()). save ();
Să trecem prin acest cod liniar și să vedem cum funcționează:
'.contact de intrare focusout': funcție (el, ev) this.updateContact (el); ,
apeluri updateContact ()
atunci când există pierde concentrarea.
'.contact input key': funcția (el, ev) if (ev.keyCode == 13) el.trigger ('blur')
Declanșează estompa
eveniment pe un dacă tasta enter este apăsată în timp ce are focalizare. Aceasta va determina pierderea focalizării de intrare, care este tratată de către
focusout
organizatorul evenimentului.
'.contact select change': funcție (el, ev) this.updateContact (el),
apeluri updateContact ()
atunci când valoarea lui schimbări.
var contact = el.closest ("contact") date ("contact");
Găsește cel mai apropiat părinte și recuperează instanța modelului folosind
$ .Data ()
.
contact.attr (el.attr ('nume'), el.val ()). save ();
Actualizează contactul utilizând attr ()
. Numele fiecăruia potrivește o proprietate de contact, deci
el.attr ( 'nume')
va returna numele proprietății care este actualizată. Salvați()
este utilizat pentru a salva modificarea la a lua legatura
Model.
Există o legătură mică cu un "X" în colțul din dreapta sus al fiecărui contact. Când se face clic pe acesta, contactul trebuie șters. Pentru a face acest lucru, adăugați un alt handler la eveniment Contacte
control care arată astfel:
'click remove': function (el, ev) el.closest ('contact').
Cand X
este făcută clic pe, instanța de contact este preluată de la cea mai apropiată și
distruge()
se numește. distruge()
șterge contactul din model și îl elimină din orice model.
Legarea live va actualiza automat interfața dvs. utilizator atunci când un contact este șters.
Acum veți crea controlul și vizualizarea necesare pentru a crea un contact. Mai întâi veți avea nevoie de un buton gigant "Nou contact". Adăugați acest cod la Va trebui, de asemenea, să creați o nouă vizualizare care va face un formular pentru crearea unui contact. Salvați acest cod ca Această vizualizare redă Acum va trebui să creați un nou control denumit Să mergem în detaliu acest control pentru a vedea ce se întâmplă: Creează un contact gol utilizând Glisați formularul afară din vedere. apeluri Apel apeluri Găsește Dacă numele contactului nu este gol, Controalele acceptă, de asemenea, dispozitive de gestionare a evenimentelor șablon, care vă permit să personalizați un handler de evenimente și să ascultați evenimente pe alte obiecte decât Personalizați comportamentul de manipulare utilizând Controalele se pot lega și de alte obiecte decât Acești manipulatori vor fi curățați când instanța Control este distrusă. Acest lucru este esențial pentru evitarea scurgerilor de memorie care sunt frecvente în aplicațiile JavaScript. Va trebui să utilizați un handler de evenimente șablon pentru a afișa formularul când se face clic pe butonul "Contact nou". Adăugați acest handler de evenimente la Butonul "Contact nou" este în afara ecranului Ca și celelalte aplicații de control din aplicația dvs., va trebui să creați o nouă instanță a aplicației Cu această schimbare, o instanță a Atunci când este creat un contact nou, Aceasta se leagă de Asocierea live va actualiza automat interfața aplicațiilor atunci când se adaugă contactul Asta este totul pentru partea finală a acestui tutorial. În partea a treia vă: Acesta este sfârșitul tutorialului managerului de contacte CanJS. Iată un rezumat al a ceea ce a fost acoperit în acest tutorial de trei părți: Acum aveți tot ce aveți nevoie pentru a construi aplicații JavaScript folosind CanJS. Du-te construi ceva minunat. Pentru documentația completă și mai multe exemple de aplicații, vizitați CanJS. Vă mulțumim pentru lectură!index.html
chiar deasupra Contact nou
createView.ejs
în dosarul vizualizări:
contactView.ejs
sub-șablon și adaugă butoanele "Salvați" și "Anulați". Iată cum arată în aplicație:Crea
care va afișa formularul și va salva noul contact la a lua legatura
Model. Adăugați acest cod la contacts.js
: Create = can.Control (show: function () this.contact = new Contact (); this.element.html (can.view ('views / createView.ejs', contact: this.contact, (200);), hide: function () this.element.slideUp (200);, '.contact input input': function (el, ev) (el) this.createContact (el), '.cancel click': function () this.createContact (el); .hide (); createContact: function () varform = this.element.find ('form'); values = can.deparam (form.serialize () ) this.contact.attr (valori) .save (); this.hide (););
show: function () this.contact = contact nou (); this.element.html (can.view ('views / createView.ejs', contact: this.contact, categories: this.options.categories)); this.element.slideDown (200); ,
contact nou()
și îl atribuie this.contact
. Noul contact este trecut la can.view ()
împreună cu categoriile care urmează să fie redate. ascunde: funcția () this.element.slideUp (200); ,
'.contact input keyup': funcția (el, ev) if (ev.keyCode == 13) this.createContact (el);
createContact ()
dacă tasta enter este apăsată în timp ce se află într-una din intrările. '.să salvați clic pe': function (el) this.createContact (el),
createContact ()
când se face clic pe butonul "Salvați". '.cancel clic': function () this.hide (); ,
ascunde()
când se face clic pe butonul "Anulare". forma var = this.element.find ('form'); valori = can.deparam (form.serialize ());
element și utilizează jQuery
serialize ()
pentru a obține un șir reprezentând toate valorile formularului. Apoi, șirul serializat este convertit la un obiect folosind can.deparam ()
. dacă (values.name! == "") this.contact.attr (values) .save (); this.hide ();
attr ()
este utilizat pentru a actualiza contactul stocat în this.contact
. Salvați()
este chemat să salveze modificările modelului, iar formularul este ascuns prin apelare ascunde()
.
Utilizarea Handlers Event Template
this.element
.NUME
în procesul de tratare a evenimentului. Variabila din interiorul coastelor curbate se uită în sus pe butoanele Controlului this.options
în primul rând, și apoi fereastră
. Ați putea crea mai multe instanțe ale aceluiași control, dar personalizați comportamentul gestionarilor de evenimente în fiecare instanță.this.element
folosind manipulatoare de evenimente șablon. Dacă variabila din interior NUME
este un obiect, Control se va lega de acel obiect pentru a asculta evenimente. Obiectul nu trebuie să fie un element DOM, poate fi orice obiect ca un model. Pentru a asculta un clic oriunde pe o pagină pe care o folosești: 'document faceți clic pe'
. ca manipulator de evenimente.
Afișarea formularului
Crea
Controlează în contacts.js
: 'document # click-new contact': function () this.show ();
Crea
Elementul de control, deci 'document # new-contact'
este folosit ca selector pentru buton. Când se face clic pe ea, formularul va aluneca în jos.
Inițializarea funcției Creare comandă
Crea
Control. Actualizați funcția pregătită pentru documente în contacts.js
pentru a arata astfel: $ (document) .ready (functie () $ .when (Category.findAll (), contact.findAll ()). ] nou Creare ('# crea', categorii: categorii); contacte noi ('# contacte', contacte: contacte, categorii: categorii); : categorii););)
Crea
Controlul va fi creat pe #crea
element. Se va trece lista categoriilor.
Reactând la un nou contact
Model.List
stocate în Contacte
Controlul trebuie actualizat. Faceți acest lucru folosind șabloane de gestionare a evenimentelor șablon. Adăugați acest handler de evenimente la Contacte
Controlează în contacts.js
: 'Contact creat': funcție (list, ev, contact) this.options.contacts.push (contact);
creată
eveniment al a lua legatura
Model. Noul contact este adăugat la Model.List
stocate în Contacte
Controlează folosind Apăsați()
.
this.options.contacts
.Înfășurarea în sus