, bygning af store, pålidelige og testes knockout.js ansøgninger,,,,, andel,,,,,,,, 13,,,,,,, det cyber - mandag envato tuts + kurser vil blive reduceret til $3.- og' t miss.,, knockout.js er en populær åben kilde (mit) mvvm javascript ramme, der blev skabt ved steve sandersen.dets websted giver god information, og folk om, hvordan man kan opbygge enkle ansøgninger, men desværre ikke gøre det større ansøgninger.lad os udfylde nogle af hullerne.,,,, amd og kræver. js, amd er en javascript modul format, og et af de mest populære (hvis ikke det mest) rammer er http://requirejs.org af https://twitter.com/jrburke.det består af to overordnede funktioner, require(), og define(),, selv om require.js omfatter også en begyndende javascript fil, såsom vigtigste. js,., < manuskript src = "js /kræver jquery. min.js" data vigtigste = "js /main" > < /manuskript >, der primært er to varianter af require.js: en vanilje, require.js, fil, og som omfatter jquery (kræver jquery,).naturligvis, sidstnævnte anvendes hovedsageligt i jquery mulighed for websteder.efter tilsætning af en af disse filer på din side, du kan tilføje følgende kode til din main.js, fil: kræver (["https://twitter.com/jrburkeapp"] funktion (app) (app. init().}), require(), funktion, der typisk anvendes i, main.js, - - men du kan bruge det direkte omfatter et modul, hvor som helst.det accepterer to argumenter: en liste over områder og en callback - funktion,.,, callback funktion udfører, når alle områder med lastning, og de argumenter, gik til den callback funktion, er de genstande, der kræves i ovennævnte system. det er vigtigt at bemærke, at den tilhørende belastning asynkront med.ikke alle er biblioteker og overensstemmende, men require.js tilvejebringer en mekanisme til - de typer biblioteker, således at de kan blive ladt. denne kode forudsætter et modul, app,, der kunne se ud som følgende:, definere (["jquery", "ko"] funktion ($, ko) (var - app = function() {}; app.prototype.init = function() (//lokalitet alt det ting}; tilbage nye app().}), define(), funktion er har til formål at definere et modul,.det accepterer tre argumenter: navnet på det modul (som er typisk ikke medregnet), en liste over områder og en callback - funktion.det, define(), funktion giver dig mulighed for at adskille en ansøgning til mange moduler, hver med en specifik funktion.dette fremmer afkobling og adskillelse af bekymring for hvert modul har sine egne særlige ansvar. ved hjælp af knockout.js og require.js sammen, han er og klar, og det beskriver sig selv som en anonym modul.du behøver ikke at - - og bare optage det i din vej.de fleste amd klar knockout plugins liste det som "sild" snarere end "ko", men du kan anvende enten værdi: kræver. ud ({veje: {ko: "sælger /knockout min" post -: "sælger /post", understreger: "sælger /understrege min", supplere: "sælger /forstærke"}, shim: {understreger: {eksport: "_"}, supplere: {eksport: "supplere"), baseurl: "jeg er"}); denne kodeks er på toppen af vigtigste. js,.de veje, definerer et kort over fælles moduler mulighed at belastning med en nøgle navn i stedet for at bruge hele filen navn.de bruger en afgørende mulighed, - defineret i, veje, og kan have to særlige nøgler til eksport, og dep,.den eksport, centrale definerer, hvad den shimmed modul afkast og dep, definerer andre moduler, at shimmed modul kan afhænge af.for eksempel, jquery validere er shim ligner måske følgende: - (//... "jquery validere ": (dep): [" jquery "]}}, enkelt - og multi - side apps, det er almindeligt at indeholde alle de nødvendige javascript i en enkelt side anvendelse.så kan du definere konfigurationen og den oprindelige kræver af en enkelt side anvendelse i main.js, som så: kræver. ud ({veje: {ko: "sælger /knockout min" post -: "sælger /post", understreger: "sælger /understrege min", supplere: "sælger /forstærke"} {ko:, - (udførsel: "ko"}, understreger: {eksport: "_"}, supplere: {eksport: "supplere"), baseurl: "jeg er"}) kræver (["https://twitter.com/jrburkeapp"] funktion (app) (app. init();}), kan du måske også brug for særskilte sider, der ikke blot har side specifikke moduler, men deler et fælles sæt moduler.james burke har to samlinger, at gennemføre denne type adfærd. resten af denne artikel forudsætter, du bygger en multi - side anvendelse.jeg vil kalde, main.js, til common.js og omfatter de nødvendige, require.config i ovenstående eksempel i filen.det er kun semantisk. nu vil jeg kræve, common.js i mine filer, som denne:, < manuskript src = "js /kræver jquery. er" > < /manuskript > < manuskript > kræver ([". /det /den fælles"] funktion () (//er /fælles fastsætter baseurl er js ///kan bare bede om "app /main1 her i stedet //'js /app /main1" kræver (["sider /index"]);}). < /manuskript > < /organ > < /html >,, require.config, funktion vil henrette, som kræver, at den vigtigste sag for den specifikke side.den sider /index, vigtigste fil ligner måske følgende: kræver (["app", "post", "ko", "viewmodels /indexviewmodel"] funktion (app -, post -, ko, indexviewmodel) (window.app = app; window.postal = post; ko. applybindings (nye indexviewmodel());}); denne side /index, modul er nu ansvarlig for lastning af alle de nødvendige kode for,., side.du kan tilføje andre store filer til sider fortegnelse, som også er ansvarlig for lastning i deres afhængige moduler.det giver dig mulighed for at bryde med side ned i mindre stykker, samtidig med at man undgår unødvendige manuskript optagelser (f.eks. herunder javascript for. i den about.html, side).,, stikprøve, anvendelse, lad os skrive en stikprøve anvendelse ved hjælp af denne metode.det vil vise en søgbar fortegnelse over ølmærker, og lad os vælge dine favoritter ved at klikke på deres navne.Here is the app's folder structure:, ,Let's first look at ,index.html,'s HTML markup:,<section id="main"> <section id="container"> <form class="search" data-bind="submit: doSearch"> <input type="text" name="search" placeholder="Search" data-bind="value: search, valueUpdate: 'afterkeydown'" /> <ul data-bind="foreach: beerListFiltered"> <li data-bind="text: name, click: $parent.addToFavorites"></li> </ul> </form> <aside id="favorites"> <h3>Favorites</h3> <ul data-bind="foreach: favorites"> <li data-bind="text: name, click: $parent.removeFromFavorites "> < /li > < /ul > < /bortset > < /afsnit > < /afsnit > <!- import ("skabeloner /liste. html). > < manuskript src =" js /kræver jquery. er "> < /manuskript > < manuskript > kræver ([". /det /den fælles "] funktion (fælles) (//er /fælles fastsætter baseurl er js ///kan bare bede om" app /main1 her i stedet //'js /app /main1 "kræver ([" sider /index "]);}). < /manuskript >, sider, struktur vores ansøgning anvender multiple" sider "eller" individuel "på en side, fortegnelse.disse særskilte sider er ansvarlige for starter hver side i ansøgningen.,, viewmodels, er ansvarlig for at udarbejde knockout - bindinger. viewmodels, viewmodels, mappe er, hvor det vigtigste knockout.js anvendelse logik liv.for eksempel, indexviewmodel, ligner følgende: //https://github.com/jcreamer898/nettutsknockout/blob/master/lib/js/viewmodels/indexviewmodel.js definere (["ko", "understreger", "post", "modeller /øl", "modeller /baseviewmodel", "fælles /bus"] funktion (ko, _, postvæsen, øl, baseviewmodel, bus) {var indexviewmodel = function() {this.beers = [...], this.search = "." baseviewmodel. anvendelse (dette argumenter)}; _. udvide (indexviewmodel.prototype, baseviewmodel.prototype, {påbegynd: function() (//...}, filterbeers: function() {*.* /}, analysere: funktion (øl) {*.* /}, setupsubscriptions: function() {*.* /}, addtofavorites: function() {*.* /}, removefromfavorites: function() {*.* /}}); tilbage indexviewmodel.}), indexviewmodel, definerer et par grundlæggende områder, på toppen af filen, og det arver, baseviewmodel, påbegynd medlemmerne som knockout.js observerbare genstande (vi vil diskutere dette kort), snarere end at definere alle de forskellige funktioner, som viewmodel rettens medlemmer understrege. det er, extend(), funktion, udvider prototype, af, indexviewmodel, datatype, arv og en basemodel, arv er en form for kode genbrug, som gør det muligt at genanvende funktioner mellem lignende typer af objekter i stedet for at omskrive den funktion.så, det er nyttigt at definere en basismodel, at andre modeller eller kan arve fra.i vores tilfælde, til vores base, model er baseviewmodel:, var baseviewmodel = funktion (optioner) {. _setup (muligheder). påbegynd. (denne, optioner)}; _. udvide (baseviewmodel.prototype, {påbegynd: function() {}, _setup: funktion (muligheder) (var - foni. muligheder = muligheder
bygning af store, pålidelige og testes knockout.js ansøgninger
Previous:i ember.js: de næste skridt