steg 03 – kollaborering – marta

Idag så har jag gjort en fork och en pull request mot Martas app.
Det jag har ändrat/implementerat i hennes app är följand:

Tagit bort ”överlödiga” jquery selectorer och lagt dess i create direkt istället.

‘artistAdded’-eventet har jag ändrat eftersom du inte behöver en artistModel där, eller du använder den inte i vilket fall.

Ändrat sättet du skickar in din artistCollection till newArtist-vyn. Efterosm du endast hanterar en collection i denna vy så är det rekommenderat att använda { collection : this.artistCollection } i denna istället för att behöva skapa en egen definerad variabel.

Hela pull requesten kan ses här.

Todo – RIA

Nu är min RIA (Rich internet application) färdigställd (i alla fall inom ramarna för kursen) och då tänkte jag skriva några rader kring projekt och kursen överlag. Applikationen finns att se här, och källkoden finns här.

Innehåll:

  1. Planering
  2. Implementation
  3. localStorage
  4. Kollaborering
  5. slutsats

Anledningen till att jag valde att göra en ”simpel” Todo applikation är för att det kändes som det enklaste sättet att lära sig ett nytt ramverk. Man får lära sig arbeta med vyer, events, CRUD och får en grundläggande förståelse för hur Backbone fungerar.

Planering

Planeringsstadiet i kursen kändes som ett bra moment, man fick tänka igenom alla objekt och funktioner innan man ens hade börjat koda någonting. Det är faktiskt väldigt ovanligt för mig som webbutvecklare som inte riktigt varit med i skarpa projekt och därför skippar planeringsstadiet i varje ”privat” projekt men jag ser klart fördelen med att göra detta och jag ska försöka bättra mig på den fronten.

Implementation

Nästa steg var att börja implementera min planerade applikation. Det var här problemen, självklart, började dyka upp. Först upplevde jag en hel del problem med att förstå hur require.js fungerar men att ha läst igenom Organizing your application using Modules (require.js) så klarnade det hela väldigt mycket faktiskt.

Backbone & Underscore

Nu gällde det bara att förstå sig på Backbone i sig, så där fick jag även spendera några timmar med att läsa på och testa olika implementationer för att få en bättre förståelse. Implementationen gick vidare och jag fick väldigt konstiga och kluriga buggar som både jag och David fick sitta och försöka lösa väldigt länge men felsökning är alltid roligt, i rimliga mått.

Events – It’s tricky.. sometimes

Det klurigaste, men även det smidigast när förståelsen var på plats, var helt klart events och hur man ska jobba med dessa. Det finns t.ex flera olika lösningar för att ta bort en modell som man klickat på, men vad är det smidigaste sättet? Jag valde att implementera en vy för varje enskild Todo som gjorde att jag kunde koppla ett klick event till det elementet som i sin tur gjorde att jag bara kunde köra this.model.destroy();

1
2
3
delete : function() {
  this.model.destroy();
}

localStorage

Jag använde mig utav localStorage som lagring för den här applikationen men har de senaste dagarna även hittat en, i brist på annan kunskap, lösning för att koppla på MongoDB som lagring genom att lägga en url-egenskap på modellen/collectionen som sedan går via ett php script för att hämta data från en MongoDB databas. Denna funktionalitet är inte implementerad i min applikationen utan testad för ”utbildningssyfte”. Eventuell vidare utveckling av applikationen är att implementera en lösning för att applikationen ska använda MongoDB för att spara data externt och när användaren är online, men samtidigt använda localStorage på varje enskild klient för att kunna köra applikationen offline med.

Kollaborering

Jag har ännu inte hunnit göra så mycket i kollaboreringsstadiet förutom det jag nämner i föregående inlägg – kollaborering – pollthingy, vilket var väldigt enkelt att implementera. Sen var det inte heller några större svårigheter att använda github för kollaboreringen, det fungerade väldigt smidigt och har fått mig att inse kraften i github, faktiskt så pass att jag hellre kör det nu än någon annan versionhanterings lösning som t.ex Google Code genom SVN.

Slutsats

Ja, då var vi här.. Allt som allt så har hela projektet varit roligt att genomföra, klurigt, utmanande men samtidigt väldigt givande. Det känns skönt att ha fördjupat sig lite mer i ett javascript ramverk för att lära sig göra ”riktiga” applikationer med det istället för att bara använda javascript för t.ex. valdering av formulär och lite snygga animeringar. Känns som att jag fick upp ögonen för javascript som ett programmeringsspråk ännu mer än tidigare, men det kommer nog aldrig riktigt ersätta kärleken för PHP eller ASP.NET.

Dock, så har jag faktiskt börjat skriva om mina senaste applikationer som t.ex Chatter i Backbone, men jag har ännu inte kommit speciellt långt i utvecklingen.

Summa summarum, Backbone, underscore, require kommer definitivt komma till användning i mina framtida applikationer.

steg 03 – kollaborering – pollthingy

Idag har jag gjort en fork på Rickard Magnussons applikation, Pollthingy (Pollthingy @ Github), implementerat mina ändringar och skickat en pull request.

Appen är en simpel men bra skriven Poll-app för att skapa egna polls.
De ändringar jag har implementerat i applikationen är:

Added validation to the PollModel and the AnswerModel.
Try-catch for validation on create view.
Validation errors show in alert-boxes.
Removed all cluttred conlogs across the application.
Changed the add method to the application from this.collection.add => this.collection.create because .add did not run the validate method.

Se pull request.

Att utföra en fork var vädligt enkelt, smidigt och genialt! Sedan var det vara att skapa ett lokalt repo för fork:en och så var man igång, precis som vanligt.

Även en pull request var jätte enkel att göra, genom webbgränssnittet på github så var det bara att klicka på pull request på sitt egna repo (en fork skapar ett eget repo av det ursprungliga repot) och skriva lite kommentarer och skicka iväg requesten. Riktigt smidigt och jag ska lätt börjar använda github mer och mer för egna projekt.

steg 02 – implementation – dag 9

Idag har det hänt mycket i applikationen, känns det som i alla fall. Kom fram till att jag hade placerat relationerna lite fel mellan modellerna men det är nu löst. Relationerna från TaskModel har flyttats över till CategoryModel eftersom det faktiskt är CategoryModel som har en många relation till TaskModel.

Har även gjort en hel del styling och färdigställt det mesta i applikationen. Det som är kvar är ett event som behöver triggas när en användare att markera en uppgift som completed, så behövs TaskCollection sorteras igen.

Inte så mycket kod att visa idag känner jag. Har även passat på och skriva dokumentationen för applikationen, som finns här, har även skrivit dit lite tips på framtida vidareutveckling inför nästa (läs nuvarande) steg i kursen.

steg 02 – implementation – dag 8

Yes! Nu har jag i flera dagar försökt fixa ett problem!
Problemet i sig var att efter att en task har lagts till, så ska vyn renderas om och jag testade att binda events på alla vyer jag har för att åstadkomma detta. Och efter många frustrerande timmar med add, change bla bla bla events så valde jag att i categroycollectionview.js att sätta detta event:

1
    this.collection.bind( 'all', this.render, this );

Denna lösningen hittade jag efter lite sökande på nätet, jag har dock stött på den tidigare men inte velat använda den eftersom den faktiskt inte specificerar vilket typ av event och därför har jag sett det som ”fulkod”. Men nu får det fungerar som en nödlösning eftersom inget annat jag testat har fungerat.

Har även implementerat ett sätt att visualisera en todo som är Done. Detta enkelt genom att ett change event triggas på todon och ändrar helt enkelt css attributet background.