interaktive bindinger

, interaktive bindinger,,,,, andel,,,,,,,,,,,,,,, det cyber - mandag envato tuts + kurser vil blive reduceret til $3.- og' t miss. denne post er en del af en række kaldes knockout koncist. udseende bindingsaccessing eksterne data, udgør elementer, er den traditionelle måde at interagere med brugere via et websted.arbejde med formularer i knockout.js er det samme som at arbejde med udseende bindinger.men, da brugerne kan ændre form, områder, knockout.js forvalter opdateringer i begge retninger.det betyder, at interaktive bindinger, begge veje.de kan være af den opfattelse programmatically og ajourfører i overensstemmelse hermed, eller de kan være af den opfattelse, at læse programmatically.,,,,,,, fig. 19: knockout.js formerings - ændringer i begge retninger, f.eks. du kan fastsætte værdien af en tekst fra viewmodel input område, og det vil vises i betragtning.men de bruger skrive noget til input område forårsager de associerede ejendom på viewmodel at ajourføre, også.The point is, Knockout.js always makes sure that the view and the ViewModel are synchronized.,Knockout.js includes 11 bindings for interacting with the user:, ,click,: <method>—Call a ViewModel method when the element is clicked., ,value,: <property>—Link a form element’s value to a ViewModel property., ,event,: <object>—Call a method when a user-initiated event occurs., ,submit,: <method>—Call a method when a form is submitted., ,enable,: <property>—Enable a form element based on a certain condition., ,disable,: <property>—Disable a form element based on a certain condition., ,checked,: <property>—Link a radio button or check box to a ViewModel property., ,options,: <array>• fastlægge en, < udvælge > element med et viewmodel array.,, selectedoptions: < array > - at definere de aktive elementer i en < udvælge >,.,, hasfocus: < ejendom > - at definere, om ikke den del er koncentreret., som præsenteres i den tidligere lektion udseende bindinger, er defineret i de data, binde kendetegn på en html element.nogle af dem (såsom, klik, bindende) arbejde på ethvert element, men andre (som kontrolleres) kan kun anvendes sammen med specifikke elementer. en af de store fordele ved at anvende knockout.js at forvalte html former, er du der stadig kun behøver at bekymre sig om de data.når brugeren ændrer form element er værdi, deres viewmodel automatisk vil afspejle den opdatering.dette gør det meget let at integrere brugernes input til resten af din ansøgning.  , en html form, vi bruger en ny html side for at f.eks.i stedet for en indkøbsvogn display side, vi skal arbejde med en formular til registrering af nye kunder.skabe en ny html filen, interactive-bindings.html, og tilføje følgende:, < http: //lang = en "> < head > < afsnit > interaktive bindinger < /afsnit > < meta - charset ='utf-8 /> < forbindelse rel ='stylesheet" href = '.. /stil. css /> < /head > < krop > < h2 > < form handlingen = "#" metode = "post" > <!- gøre - > < /form > < manuskript src ='knockout-2.1.0. er "> < /manuskript > < manuskript > funktion personviewmodel() {var selv = det; this.firstname = ko. observerbare (" john "); this.lastname = ko. observerbare (" smith ");} ko. applybindings (nye personviewmodel()). < /manuskript > < /organ > < /html > det er en forenklet version af, hvad vi har arbejdet med i serien.i denne lektie, vi skal bekymre os om, konfigureringen, udgør elementer.forarbejdning form bemærkninger er tilbage til næste lektion.,,, klik, klik bindende bindende, er et af de enkleste interaktive bindinger.det kalder en metode til din viewmodel, når brugeren klik element.for eksempel, at tilføje følgende knappen inde i den, < form > element:, < p > < knap data binder ='click: saveuserdata "> forelægger < /knap > < /p >, når brugeren klik på knappen, knockout.js kalder, saveuserdata(), metode, personviewmodel,.desuden går to parametre for handleren metode: den nuværende model og dom begivenhed.en saveuserdata() metode ved hjælp af begge disse parametre vil se noget som:, this.saveuserdata = funktion (model begivenhed) {indberetning (model. firstname() + "forsøger at kassen!")og hvis (ref. ctrlkey) (varsling ("han holdt den kontrol afgørende for en grund.");}}; i dette eksempel, model, henviser til den øverste viewmodel instans, og tilfælde, er den dom, hvis trigged af brugerens klik.modellen argument vil altid være den nuværende, viewmodel, som gør det muligt at få adgang til de enkelte punkter i en liste over hver sløjfe.det er sådan, vi har gennemført removeproduct() metode i lektion 3:.,,, værdi, bindende værdi bindende er meget lig den tekst, vi har brugt i bindende i denne serie.den væsentligste forskel er, at det kan ændres ved, bruger, og viewmodel vil opdatere i overensstemmelse hermed.for eksempel, - - kan vi forbinde, firstname, og lastname, observerbare fænomener med input område ved at tilføje følgende: den form (før < knap >):, < p > navn: < inputdata binder = »value: firstname /> < /p > < p > navn: < inputdata binder = »value: lastname /> < /p >,, værdi: firstname, bindende sikrer, at, < input > element tekst er altid den samme, som den viewmodel er firstname ejendom, uanset om det er ændret af brugeren eller af deres ansøgning.det samme gælder for lastname ejendom.,, fig. 20: to måde forbindelser mellem observerbare fænomener og danne områder, kan vi undersøge det yderligere ved at medtage en knap til visning af brugerens navn og en anden til at sætte det programmatically.det lader os se hvordan den værdi, bindende værker fra begge ender:, < p > < knap data binder ='click: displayname "> display navn < /knap > < knap data binder ='click: setname" > sæt navn < /knap > < /p > den kontaktperson metoder bør se noget som følgende:, this.displayname = function() {indberetning (. firstname())}; this.setname = function() {. firstname (bob)}, klikker, display navn, vil læse viewmodel er firstname, ejendomsrettigheder, som matcher, < input > element, selv om det er blevet redigeret af brugeren.den, der hedder knap fastsættes værdien af den viewmodel ejendom, der forårsager < input > element til at ajourføre.opførelsen af disse i det væsentlige er det samme som en normal tekst bindende. endnu en gang hele idéen bag denne tovejs synkronisering, er at lade dig fokusere på dine data.efter du har oprettet en værdi, der er bindende, kan du glemme alt om html form elementer.blot få eller de associerede ejendom på viewmodel og knockout.js vil tage sig af resten. vi får ikke brug for den, displayname, og setname metoder eller deres respektive knapper, så du kan bare slette dem, hvis du vil.,,,, bindende, fald bindende lader dig lyt til vilkårlig dom begivenheder på http: //element.det er en generisk udgave af, klik, bindende.men, fordi det kan lytte til flere begivenheder, kræver det et objekt for kort begivenheder metoder (dette svarer til attr bindende er parameter).for eksempel, vi kan lytte til mouseover og mouseout begivenheder på den første < input > element med følgende:, < p ='event (data bindende mouseover: showdetails, mouseout: hidedetails) > navn: < inputdata binder = »value: firstname "/> < /p >, når brugeren brande, mouseover, tilfælde, knockout.js kalder, showdetails(), metode i vores viewmodel.på samme måde, når han eller hun forlader det element, hidedetails() kaldes.begge disse træffe de samme parametre som klik bindende er kontanthåndterende virksomheder: målet for den begivenhed, og tilfælde modsætter sig.lad os gennemføre disse metoder:, this.showdetails = funktion (mål, begivenhed) (varsling ("mus over");}; this.hidedetails = funktion (mål, begivenhed) (varsling ("mus");}; nu, når du har kontakt med, fornavn, område, bør du se begge meddelelser, dukker op.men i stedet for bare at vise en advarselsmeddelelse, lad os vise noget ekstra oplysninger for hver formular område, når brugeren ruller over det.For this, we need another observable on ,PersonViewModel,:, this.details = ko.observable(false);,The ,details, property acts as a toggle, which we can switch on and off with our event handler methods:, this.showDetails = function(target, event) { this.details(true); }; this.hideDetails = function(target, event) { this.details(false); };,Then we can combine the toggle with the ,visible, binding to show or hide form field details in the view:, <p data-bind='event: {mouseover: showDetails, mouseout: hideDetails}'> First name: <input data-bind='value: firstName' /> <span data-bind='visible: details'>Your given name</span> </p>,The contents of the ,<span>, should appear whenever you mouse over den, fornavn, område og forsvinder, når du mus.det er ret tæt på vores ønskede funktion, men tingene mere komplicerede, når vi vil se nærmere på mere end én form område.eftersom vi kun har en toggle - variabel, der nærmere er alt eller intet, hverken oplysninger vises for alle de områder, eller ingen af dem.,, fig. 21: enhver form toggling inden oplysninger samtidig, er en måde at løse dette på er ved en skik parameter til kontaktperson funktion. tilfælde som med skik parametre, er det muligt at passere skik parametre fra den opfattelse, i tilfælde af kontaktperson.det betyder, at du kan få adgang til vilkårlige oplysninger fra den opfattelse, i viewmodel.i vores tilfælde, vi bruger en skik parameter til at identificere, hvilken form bør vise sin detaljer.i stedet for et greb, de oplysninger, som vil indeholde en kæde, der repræsenterer de udvalgte element.først skal vi foretage nogle mindre ændringer i viewmodel:, this.details = ko. observerbare (""); this.showdetails = funktion (mål, omstændigheder oplysninger) {. nærmere oplysninger (nærmere oplysninger): this.hidedetails = funktion (mål, begivenhed) {. nærmere oplysninger ("")), den eneste store ændring er tilsætning af detaljer, parameter til, showdetails() metode.vi har ikke brug for en sædvane parameter for hidedetails() funktion, eftersom det kun godkender de nærmere detaljer observerbare. næste, vi skal bruge en funktion bogstaveligt i fald bindende at passere skik parameter til at showdetails():, < p ='event (data bindende mouseover: funktion (data, begivenhed) (showdetails (data, hvis "firstname"), mouseout: hidedetails) >, funktion, bogstaveligt, mouseover, er et stykke papir for vores, showdetails(), kontaktperson, at et enkelt middel til at give ekstra oplysninger.den mouseout kontaktperson forbliver uændret.endelig er vi nødt til at ajourføre < span > indeholder nærmere oplysninger:, < span data binder ='visible: details() = = "firstname" > dit navn < /span > det første navn, udgør område bør vise sin detaljerede beskrivelse, når de mus og gemme dig, da du mus, ligesom i det foregående afsnit.men nu er det muligt at tilføje oplysninger til mere end ét område ved at ændre den skik parameter.for eksempel, du kan give oplysninger om de sidste navn, input element:, < p ='event (data bindende mouseover: funktion (data, begivenhed) (showdetails (data, omstændigheder "lastname"), mouseout: hidedetails) > navn: < input data binder = »value: lastname /> < span data binder ='visible: details() = = "lastname" > dit efternavn < /span > event - bindinger, kan være en smule kompliceret at oprette, men når du forstår, hvordan de virker, gør de det muligt for ubegrænset. muligheder for reaktive design.den begivenhed, bindende kan forbindes til jquery er animation funktioner, som er omtalt i lektion 8:.nu afslutter vi udforske resten af knockout. er "interaktive bindinger.heldigvis for os, ingen af dem er næsten lige så kompliceret som begivenhed skibindinger.,,,, at /deaktiver, skibindinger, muliggøre og frakoble, skibindinger kan bruges til at skabe eller frakoble form områder baseret på visse betingelser.for eksempel, lad os sige, at du ønskede at registrere primære og sekundære telefonnummer for alle brugere.disse kan være opbevaret som normale observerbare fænomener på personviewmodel:, this.primaryphone = ko. observerbare (""); this.secondaryphone = ko. observerbare (""), primaryphone observerbare kan være knyttet til en form, område med en normal værdi, bindende:, < p > primære telefon: < input - data binder = »value: primaryphone /> < /p >, men det giver ikke meget mening at komme ind på et sekundært nummer uden angivelse af en primær, så vi aktiverer, < input > for de sekundære telefonnummer, hvis primaryphone er ikke tom:, < p > sekundære telefon: < inputdata binder = »value: secondaryphone, sikre: primaryphone /> < /p > nu brugere vil kun være i stand til at interagere med sekundære telefon, område, hvis de har.den værdi, primaryphone,.den itu, bindende er en bekvem måde at ophæve den betingelse, men ellers virker præcis som muligt.,,, er bindende, kontrolleret, er en alsidig bindende, som udviser forskellige adfærdsmønstre, afhængigt af hvordan du bruger den.generelt er de kontrolleret bindende, anvendes til at udvælge og deseiect html er kontrollable form elementer: kontrol, kasser og radio knapper, enkel kontrol kasser, lad os starte med en enkelt check kasse:, < p > irriterer mig med et særligt tilbud: < inputdata binder ='checked: annoyme type ='checkbox /> < /p > dette er en check kasse til vores form og knytter det til, annoyme, tilhører den viewmodel.som altid, dette er en gensidig forbindelse.når brugeren udvælger eller deselects kassen, knockout.js ajourfører de viewmodel, og når man fastsætte værdien af viewmodel ejendom, ajourfører den opfattelse.glem ikke at definere annoyme observerbare:, this.annoyme = ko. observerbare (korrekt), ved hjælp af kontrolleres, bindende på denne måde er at skabe en - forhold mellem en enkelt kontrol boks og en boolean observerbare.,, fig. 22: at forbinde en boolean observerbare med en enkelt check kasse, se rubrik arrays det er også muligt at anvende, er bindende med arrays.når du binde en check kasse til en observerbar system, de udvalgte kasser svarer til de elementer, der er indeholdt i det system, som vist i nedenstående figur:,, fig. 23: tilslutning af en observerbar system med flere check kasser, f.eks. overveje følgende iagttages:, this.annoytimes = ko. observablearray ("godmorgen", "i aften]), kan vi forbinde punkterne i den observerede system til kontrol af kasser med, værdi, giver hver, < input > element:, < p > irriterer mig med et særligt tilbud: < inputdata binder ='checked: annoyme type ='checkbox /> < /p > < div data binder ='visible: annoyme" > < div > < inputdata binder ='checked: annoytimes værdi = godmorgen 'type ='checkbox /> dette anvendelsesformåldet, annoyme, ejendom fra tidligere lektion til greb en liste over check kasser for udvælgelse, da det ville være et godt tidspunkt at blive irriteret.da værdi = godmorgen, er den første check kasse. - det vil blive udvalgt, når "godmorgen", snor er i annoytimes system.det samme gælder for den anden check kasser. "morgen "og" aften "er det oprindelige indhold af nettet, så skal du se noget som følgende i din hjemmeside:,, fig. 24: se kasser med den oprindelige tilstand af, annoytimes observerede system, og da vi ved, observerbare, system, forbindelsen er to måder, hvorpå lukning af alle af de kasser vil fjerne de tilsvarende snoren fra den, annoytimes, array. radio knapper, i forbindelse med kontrolleret, bindende i en radio" - gruppen.i stedet for en boolean - eller et system, radio knapper forbinde deres værdi, tillægger en snor ejendom i viewmodel.for eksempel, vi kan omsætte vores check kasse system i en radio knap gruppe ved først at ændre annoytimes ses en snor:, this.annoytimes = ko. observerbare (godmorgen '); så meget, vi skal gøre, er at vende, < input > elementer i radioen, < knapper:; inputdata binder ='checked: annoytimes værdi = godmorgen' type = træffer navn ='annoygroup /> hver, < input >, bør have en "radio", som dens art og "annoygroup" i sit navn.dette har ikke noget at gøre med knockout.js-it blot tilføjer dem alle til samme html radio knap - gruppen.nu, værdien attribut i udvalgte radio knap skal altid opbevares i annoytimes ejendom.,, figur 25: der observeres en snor med flere radio knapper,,, optioner, bindende, muligheder, bindende fastlægger indholdet af a < udvælge > element.dette kan tage form af enten en eller flere særlige liste ud over.først skal vi se ud over.lad os klippe den annoytimes ejendom, én gang til:, this.annoytimes = ko. observablearray (["i morgen", "i dag", "i aften"]), så vi kan knytte den til en, < udvælge >, område:, < div data binde ='visible: annoyme "> < udvælge oplysninger binder ='options: annoytimes" > < /udvælge > de bør nu har en ud over i stedet for en radio knap gruppe, men det er ingen nytte til at have en sådan liste, hvis du ikke kan finde ud af, hvilket punkt på dagsordenen er udvalgte.for det, vi kan genbruge, værdi, bindende fra tidligere i lektion:, < udvælge oplysninger binder ='options: annoytimes, værdi: selectedtime "> < /udvælge > det fastsætter, hvilke ejendomme på den viewmodel indeholder de udvalgte snor.vi har stadig brug for at definere denne ejendom:, this.selectedtime = ko. observerbare (i dag), også dette forhold går begge veje.om fastsættelse af værdien af selectedtime, vil ændre de udvalgte post i ud liste, og vice versa. ved hjælp af genstande, som muligheder, der kombinerer de muligheder og den værdi, skibindinger give dig alle de værktøjer, de har brug for at arbejde ud lister, som indeholder strenge.men det er ofte meget mere praktisk at udtage hele javascript objekter ved hjælp af en ud.således indeholder en liste over produkter, der minder om tidligere lektion:, this.products = ko. observablearray ([{navn: "øl, pris: 10.99} {navn:" møgunger, pris: 7,99} {navn: "røv", pris: 2.99)]), da du forsøger at skabe en < udvælge > element ud af det her, alle dine ting bliver gjort så [genstand, formål]:,, figur 26: forsøg på at anvende genstande med de muligheder, bindende, heldigvis knockout.js lader dig give en, optionstext parameter til at definere formålet ejendomsret til at gøre på < udvælge > element:, < udvælge oplysninger binder ='options: produkter, optionstext: "navn" værdi ": favoriteproduct > < /udvælge > for dette indlæg til at arbejde, bliver du også nødt til at definere, favoriteproduct observerede på din viewmodel.knockout.js vil befolke denne ejendom til en genstand fra personviewmodel.products-not en snor, som det gjorde i det foregående afsnit.,,, selectedoptions, bindende, den anden at mulighed for html, < udvælge > element er en multi - udvælge liste.konfigureringen af en multi - udvælge liste er meget om at skabe et ud over, men i stedet for en udvalgt punkt på dagsordenen, har du en vifte af udvalgte poster.så i stedet for at bruge en værdi, der er bindende for de valg, du bruger selectedoptions bindende:, < udvælge oplysninger binder ='options: produkter, optionstext: "navn", selectedoptions: favoriteproducts størrelse = (3) flere ='true "> < /udvælge >, attribut defineres, størrelse, antallet af synlige muligheder, og flere ='true, gør det til en multi - udvælge liste.i stedet for en streng ejendom, favoriteproducts bør påpege et system:, var unger = {navn: "møgunger, pris: 7,99}; this.products = ko. observablearray ([{navn:" øl, pris: 10.99}, møgunger, {navn: "røv", pris: 2.99)]). this.favoriteproducts = ko. observablearray ([møgunger]), bemærke, at vi har brug for at give den samme objekt reference (, møgunger,) for begge produkter, og favoriteproducts for knockout.js at nulstille udvælgelse korrekt.,,, hasfocus, bindende, og så kommer vi til vores endelige interaktive bindende:, hasfocus,.denne rammende navngivne bindende lader dig manuelt, der er fokus på et interaktivt element ved hjælp af en viewmodel ejendom.hvis det af en eller anden grund, du ville kunne lide den "primære telefon" område for at være den oprindelige fokus, kan du tilføje en hasfocus bindende, som så:, < p > primære telefon: < inputdata binder = »value: primaryphone, hasfocus: phonehasfocus /> <. /p >, så kan du tilføje en boolean observerede, at fortælle knockout.js give det fokus, this.phonehasfocus = ko. observerbare (korrekt), ved at sætte denne ejendom andetsteds i din ansøgning, kan du lige styre strømmen af fokus i dine papirer.desuden, du kan bruge, hasfocus, for at spore brugerens fremskridt gennem flere form områder.,, smdrg., denne lektion omfattede interaktive bindinger, som løftestang knockout. er "automatiske afhængighed følger mod html form områder.i modsætning til udseende bindinger, interaktiv spænder er gensidig, skibindinger ændringer af brugergrænsefladen komponenter, automatisk er afspejlet i den viewmodel og opgaver til viewmodel egenskaber af knockout.js at ajourføre den opfattelse, i overensstemmelse hermed. interaktive bindinger, udseende bindinger og kontrol flow bindinger komponere knockout. er "blive værktøjskasse.de fælles mål er at tilvejebringe en data - centriske grænseflade for dit web ansøgninger.når man definerer den præsentation af data ved hjælp af disse bindinger, du skal bekymre dig om, er at manipulere med de underliggende viewmodel.dette er en meget mere håndfast måde at udvikle dynamiske web ansøgninger. denne lektion drøftede former set ud fra det synspunkt og viewmodel.interaktive spænder er et intuitivt, fleksibel metode til at få adgang til brugerinput, men vi har endnu til at drøfte, hvordan vi skal få disse data ud af forenden og til en server-side manuskript.den næste lektion tager fat på dette spørgsmål ved at integrere knockout.js med jquery er ajax funktionalitet. denne lektion er et kapitel i, knockout - kort, en fri ebook fra holdet på syncfusion.,











Previous:
Next Page: