De ce am nevoie de Knockout.js?
- Să fie capabil să umple cu ușurință interfața de date a obiectului JSON cum ar fi (model):
Sustragerea modificările:
Ce este un atribut de date se leagă și legături?
Knockout.js oferă un set de legături standard (legături), care vă permit să modificați stilul, conținutul, procesoare, și așa mai departe, creând o serie de lucruri magice. În plus, puteți scrie ancora despre el din nou perfect descris ca docuri.
Aceasta încheie o descriere a motivului pentru care au nevoie de un knock-out, orice altceva știi care site-ul pentru a găsi și de a trece la unele lucruri nu sunt evidente pentru incepatori.
Lucrul cu observableArray
Să presupunem că aveți nevoie pentru a schimba în mod dinamic matrice, care a semnat unele stivuitoare (sau interfata). De exemplu, ai un nou lot de date de la server și în ciclul de a le adăuga la matrice.
Dacă faci totul pe frunte - modificările handler vor lucra cât mai multe ori pe măsură ce adăugați elemente. Și aceasta va afecta performanța. Exemplu de knockmeout.net
Deci, nu este nevoie de a face:
O modalitate mult mai bine:
Knockout.js necesare în cadrul proiectului în primul rând pentru completarea interfeței de date. Cel mai frecvent scenariu pentru acest lucru - obtinerea AJAX-interogare JSON-date de pe server și de redare, și anume actualiza conținutul fără a reîncărca pagina.
Pentru a face acest lucru avem nevoie de părți ale paginilor pe care le putem înlocui în interfața și completați datele - adică, Avem nevoie de template-uri pentru diverse date. Knockout.js capabil de a lucra cu diferite tipuri de modele (jQuery.tmpl, subliniere, nativ) - se va concentra pe acesta din urmă (deși am fost chiar permis să scrie opinia ta).
Nu sunt motoare șablon native nu acceptă utilizarea anumitor legături, în interiorul acestuia (în special, este foarte frumos, cu. Care înlocuiește contextul model pentru șablon).
Prin urmare, în unele cazuri, ar fi de dorit să se utilizeze un șablon dintr-un knock-out nativ. Pentru a face acest lucru în opțiunile este necesar să se treacă templateEngine: ko.nativeTemplateEngine.instance. Ce este interesant (și care nu sunt menționate în documentația) - acest parametru poate fi trecut în șablonul conjuncție.
Pentru șabloanele de software de redare, folosiți comanda:
Această comandă este convenabil pentru a apela, de exemplu, în _create () metoda pentru a crea jquery-widget care utilizează șabloane, iar acest lucru se face după cum urmează:
Ca șablon pentru apelul de la un alt șablon folosind un șablon standard de legare:
TEMPLATENAME - numele șablonului, în practică, acest bloc id-ul, în care configurația șablonului:
În acest caz, motorul șablon nu „moștenit“ atunci când apelați template-uri imbricate - dacă ne numim un șablon din șablon, i se templating nativ tratat, modelul intern (dacă nu specificați șablonul pentru a forța) utilizează încă șablonul implicit (de exemplu, jQuery.tmpl, în cazul în care acest lucru a fost conectat în cadrul proiectului).
Prin urmare, motorul trebuie să fie specificate de fiecare dată. Dar această caracteristică ne permite să utilizeze simultan diferite sisteme de templating pentru template-uri imbricate.
Modelele fără element rădăcină
Uneori, nu doriți să creați un recipient suplimentar pentru conținutul șablonului, care nu sa dovedit că acesta este încorporat doar un singur element. În elementul de model poate fi astfel necesar datorită stilurilor sau legarea.
În acest caz, o soluție standard pentru o variantă de knock-out (elemente virtuale):
Deși el nu este descrisă în documentația.
Debugging în șabloane
Cea mai frecventă operațiune de programare - depanare (deși unii ar putea spune). Metoda de mai jos vă va permite să afișeze mesaje de la consola folosind operatorul virgulă și grupurile de operator (pentru detalii despre acești operatori).
Schimbarea contextului folosind cu și foreach - pitfall
Să presupunem că avem o matrice care deține linia pe care dorim să o urmăriți.
Array initializarea arata ca acest lucru:
Și noi dorim să aducem o formă compus din intrare pentru a-l edita ca ceva de genul:
În această înregistrare câmpurile de text nu va funcționa în două direcții - pentru a modifica textul în domeniu nu va afecta elementele de matrice, dar schimbarea elementelor de matrice vor afecta conținutul câmpurilor de text. Exemplu de jsfiddle.
Motivul este că modelul de mai sus este, în esență echivalentă cu următoarele:
cu: $ date - aici vine „despachetare“ date $: unwrapObservable ($ date) pentru tipul de tratament $ data.somefield într-un șablon pentru a lucra. Dar această despachetare înlocuiește datele $ interior - valoarea acesteia. Cum să obțineți în jurul valorii de această problemă - nu a venit la întâmplare.
concluzie
Erori de ortografie și punctuație într-o cerere personală.