Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

IT504 Javascript MVC çerçeveleri Yrd. Doç. Dr. Yuriy Mishchenko.

Benzer bir sunumlar


... konulu sunumlar: "IT504 Javascript MVC çerçeveleri Yrd. Doç. Dr. Yuriy Mishchenko."— Sunum transkripti:

1 IT504 Javascript MVC çerçeveleri Yrd. Doç. Dr. Yuriy Mishchenko

2 Plan • MVC nedir – Problem – Çözüm – Etkileşim modeli • Temel MVC örneği – öğrenci kayıt sistemi • Javascript MVC çerçeveleri temeli • Backbone – Nesneler ve özellikleri – RESTful arayüzleri – Örnek • Angular.js – Ana mantığı • Şablonlama kullanarak tasarım (HTML templating) • İfadeler ve direktivler (expressions and directives) • veri bağlamaları (data binding) – Yarışıcı rakamları tablosu örneği

3 MVC nedir? • MVC bir yazılım geliştirme desenidir • MVC'de yazılım geliştirme işi, üç tipik bölüme başından ayrılır ve sonraki geliştirme bu üç bölüm çerçeve içerisinde gerçekleştirilir • MVC üç bölümü, – Model – Görünüm – Yönetici • MVC, ingilizcede Model-View-Controller demektir

4 MVC nedir? • MVC çerçevesi şu ana problemlerine çözüm sağlamaya çalışır – Yazılımın kullanıcı arayüzü, tipik olarak yazılımın iş mantığından daha hızlı ve daha sıkca değişir ve değişebilir – Yazılım, tipik olarak aynı verileri birçok farklı şekilde göstermek zorunda ve bu tüm görünümler yazılımın verileri ile sync'te olmalı, yani verilerin değiştiğinde aynı zamanda güncelleştirilmelidir – Kullanıcı arayüzlerinin geliştirilmesi, tipik olarak farklı becerileri gerektiriyor ve aslı programcıdan farklı olan tasarımcı tarafından geliştirilir – Yazılımın ara yüzünün çalışması, tipik olarak iki faaliyetten oluşur – veri gösterme ve veri güncelleştirme – Yazılımın ara yüzleri, tipik olarak farklı cıhazlar için yeniden geliştirilmeli fakat iş mantığı bu süreçte değişmez – Yazılımın ara yüzü düzeltme, tipik olarak yazılımın iş mantığından daha zahmetli ve iş mantığından ayrıldığından faydalanır

5 MVC nedir? • Bu problemlerin çözümü önermek için, MVC çerçeve yazılımın tipik olan veri ve iş mantığı, kullanıcı ara yüzü ve ikisinin etkileşimini ayarlanan yönetici fonksiyonları açıkça ayrıyor

6 MVC nedir? • Model, ilgili veri içeren, yöneten, dışarı sunan, ve dışardan gelen talimatlara göre tutarlı şekilde güncelleştiren yazılım projesinin bir mödülü dür

7 MVC nedir? • View veya Görünüm, bilgi kullanıcıya göstermeyi kontröl eden ve kullanıcı ile etkileşimi ayarlayan yazılım projesinin mödülü dür

8 MVC nedir? • Controller veya Yönetici, kullanıcının komutları yorumlayan ve modelde ve görünümde ilgili değişiklikleri yapmayı talep eden yazılım projesinin bir modülü dür

9 MVC nedir? ModelView Controller

10 MVC nedir? ModelView Controller Model, yazılımın verilerini ayarlar ve View'e gereken şekilde sunar

11 MVC nedir? ModelView Controller View, kullanıcıya veri sunar ve kullanıcıdan komutları alır

12 MVC nedir? ModelView Controller Controller, Model ve View arasındaki etkileşimi ayarlar

13 MVC nedir? (Microsoft Developer Network MVC sayfası) : • Önemli not yapılmalı: MVC çerçevesinde View ve Controller ikiside Modele bağlıdır. Ancak, model hem View hemde Controller'den bağımsızdır. Bu özellik, MVCdeki ayırmanın anahtar özelliği. Bu ayırma, modeli bağımsız geliştirme ve düzeltmeye önemli fırsat sağlar.

14 MVC nedir? • Bu ayırma, birçok zengin internet uygulamalarında (RIAda) arka planına götürülür; aslında birçok kullanıcı arayüzü çerçevesi bu tüm rolları tek bir nesne olarak temsil eder. Ancak Web Uygumalarında bu ayırma – web tarayıcı View olarak ve sunucu skriptleri Controller olarak – başında ve çok açık şekilde mevcuttur.

15 MVC nedir? • Model-View-Controller, kullanıcı arayüzleri iş mantığından ayırmak için temel tasarım deseni dir.

16 MVC Örneği: Öğrenci kayıt sistemi • Örnek olarak, bir üniversitenin öğrenci kayıt sisteminin yazılımı geliştirme sürecini düşünelim • MVC çerçeveye göre, bu geliştirme süreci baştan üç ayrı bölgeye ayrıldırılmalı

17 MVC Örneği: Öğrenci kayıt sistemi – (buradaki) Model -  Öğrenci bilgileri  Güncelleştirme yöntemleri  Bilgi yöntemleri

18 MVC Örneği: Öğrenci kayıt sistemi – (buradaki) Model -  Öğrenci bilgileri  Güncelleştirme yöntemleri  Bilgi yöntemleri Ayrıca Model, bunların bir kümesi veya kolleksiyon şeklinde organize edilecektir

19 MVC Örneği: Öğrenci kayıt sistemi – (buradaki) Model -  Öğrenci bilgileri  Güncelleştirme yöntemleri  Bilgi yöntemleri –(buradaki) View –  Tüm öğrencileri tablo görünümü  Tek öğrenci bilgi görünümü  Para ödememiş öğrenci tablo görünümü  Öğrenci bilgi güncelleştirme görünümü

20 MVC Örneği: Öğrenci kayıt sistemi – (buradaki) Model -  Öğrenci bilgileri  Güncelleştirme yöntemleri  Bilgi yöntemleri –(buradaki) Controller –  Controller yöntemleri Görünümü seç Kullanıcının girişini al –(buradaki) View –  Tüm öğrencileri tablo görünümü  Tek öğrenci bilgi görünümü  Para ödememiş öğrenci tablo görünümü  Öğrenci bilgi güncelleştirme görünümü Görünüme bağlı veri güncelleştirme talepleri

21 MVC Örneği: Öğrenci kayıt sistemi – Model -  Öğrenci bilgileri  Güncelleştirme yöntemleri  Bilgi yöntemleri – Controller –  Controller yöntemleri Görünümü seç Kullanıcının girişini al –View –  Tüm öğrencileri tablo görünümü  Tek öğrenci bilgi görünümü  Para ödememiş öğrenci tablo görünümü  Öğrenci bilgi güncelleştirme görünümü Bu şekilde tasarlanan yazılım, MVC çerçevesi içinde tasarlanmıştır Görünüme bağlı veri güncelleştirme talepleri

22 Javascript MVC çerçeveleri • Javascript MVC çerçeveleri, karmaşık RIA geliştirmede kullanılan web geliştirme çerçeveleridir • Şu anda en pöpüler olan MVC çerçeveleri Backbone.js, Ember.js ve Angular.js

23 Javascript MVC çerçeveleri • Backbone.js kullanarak geliştirilmiş siteleri – USA Today (gazet) – Hulu (online TV sitesi) – Foursquare (sosyal ağ sitesi) – Disqus (online yorumlama hizmeti) – Khan Academi (online eğitim hizmeti) – Diaspora (sosyal ağ sistemi) – Pandora (online radio sitesi) –...

24 Javascript MVC çerçeveleri • Ember.js kullanarak geliştirilmiş siteleri – Yahoo (İnternet portalı) – Zendesk (customer service hizmet sitesi) – Groupon (online kupon hizmeti) – Discourse (online yorumlama hizmeti) – Square (online ödeme hizmeti) – Livinsocial (sosyal ağ sitesi) – Yapp (mobile app geliştirme sitesi) –...

25 Javascript MVC çerçeveleri • Angular.js kullanarak geliştirilmiş siteleri (Google'nin Javascript MVC çerçevesi) – PS3 için YouTube sitesi (online video hizmeti) – Crunchinator (Chrunchbase blogu için veri incelenmesi) – Musik365 (online radio hizmeti) – Posse (online sosyal oyun) – openTaste (sosyal ağı sitesi –...

26 Javascript MVC çerçeveleri nedir? • Javascript MVC çerçeveleri genellikle – "Model" için kullanılacak özel bir nesne sunar • MVC'nin modellerinin temel yapıları tanımlar • Modelin özellikleri ayarlama aletleri sunar • AJAX kullanarak sunucu ile model verilerini indirme/yükleme/sync etme araçları sunar – View olarak HTML kullanılır – Controller için özel bir nesne sunar • Bu nesne modelin haline bağlı olayların bağlamayı yönetir • HTML parse (ayrıştırma) ve templating (şablonlama) yapar • Görünümleri ayarlar

27 Javascript MVC çerçeveleri nedir? RIA Controller Veriler Görünümler "model" nesnesi • temel yapıları • Özellikleri ayarlama aletleri • AJAX sunucu ile sync etme araçları { HTML } "controller" nesnesi • olay bağlama • HTML pars etme • Görünüm ayarlama olay bağlama

28 Javascript MVC çerçeveleri nedir? RIA Controller Veriler Görünümler "model" nesnesi • temel yapıları • Özellikleri ayarlama aletleri • AJAX sunucu ile sync etme araçları { HTML } "controller" nesnesi • olay bağlama • HTML pars etme • Görünüm ayarlama olay bağlama Javascript MVC çerçeveleri

29 Backbone.js temelleri • Backbone.js, şu anda en pöpüler olan ve birçok büyük kurum tarafından kullanılan jMVC çerçevesi • Backbone.js, MVC geliştirmesi için birkaç temel nesne sağlar – Model – Collection – View – Router 29http://www.scinetcentral.com/~mishchenko/MIT504.html

30 Backbone.js temelleri • Backbone "model" nesnesi, uygulamanın verilerinin modelleri tanımlamak için kullanılır • Model nesnesi, verileri ve onlarla çalışan iş mantık fonksiyonları içermeli • Model nesneleri genellikle toplu olarak bir Collection içinde kullanılır 30http://www.scinetcentral.com/~mishchenko/MIT504.html

31 Backbone.js temelleri Todo = Backbone.Model.extend({ title: null, order: null, done: false, defaults: function() { return { title: "boş todo...", order: Todos.nextOrder(), done: false }; }, toggle: function() { this.save({done: !this.get("done")}); } }); 31http://www.scinetcentral.com/~mishchenko/MIT504.html • TODO listesinde kullanılacak, TODO bir elemanını temsil eden model; • model üç özellikli todo elemanı tanımlar, default değerleri tanımlar, ve "toggle" bir eylemi tanımlar

32 Backbone.js temelleri • Model nesnesinin en önemli özellikleri: –.extend, model nesnesi üzerinde yeni genişletmiş bir modeli oluşturma –.initialize, ilgili nesne oluşturduğunda çalışacak yapıcı fonksiyon –.defaults, ilk değerlerinin atanması –.get/set, model attribütlerinin atanıp okunması –.has/unset/clear, model attribütlerinin ayarlanması –.id, model nesnesinin özel kimliği –.attributes, model nesnesinin özelliklerinin özgün hash'i –.sync/fetch/save, AJAX ve RESTfull arayüzü kullanarak sunucu ile modelinin sync edilmesi –.parse, sunucudan veri parse etmek için kullanılacak fonksiyon –... 32http://www.scinetcentral.com/~mishchenko/MIT504.html

33 Backbone.js temelleri • Bunlar dışında,.extend tanımı içinde herhangi javascript nesnesi gibi Backbone modellerinde yeni özellik ve yöntemler tanımlanabilir 33http://www.scinetcentral.com/~mishchenko/MIT504.html

34 Backbone.js temelleri • Backbone "Collection" nesnesi, uygulamanın tüm modelleri toplu olarak içeren ve onlarla toplu olarak çalışmalara imkan sağlayan bir nesnesi dir 34http://www.scinetcentral.com/~mishchenko/MIT504.html

35 Backbone.js temelleri TodoList = Backbone.Collection.extend({ model: Todo, localStorage: new Backbone.LocalStorage("todos-backbone"), done: function() { return this.where({done: true}); }, remaining: function() { return this.where({done: false}); }, nextOrder: function() { if (!this.length) return 1; return this.last().get('order') + 1; }, comparator: 'order' }); 35http://www.scinetcentral.com/~mishchenko/MIT504.html • TODO listesini temsil edip, TODO elemanları içerecek TODO elemanlarının kolleksiyonu

36 Backbone.js temelleri • Collection nesnesinin en önemli özellikleri: –.extend, collection nesnesi üzerinde yeni genişletmiş koleksiyonun oluşturulması –.model, koleksiyonda içerilecek model nesnesi –.initialize, koleksiyonun oluşturulduğunda çalışacak yapıcı fonksiyonu –.sync/fetch/parse, koleksiyonun sunucuda depolanması ve okunması yöneten fonksiyonlar –.add/remove/reset, koleksiyona elemanları eklemek ve çıkartmak için kullanılan fonksiyonlar –.push/pop/shift/unshift, belirli düzende elemanları eklemek ve çıkartmak için kullanılan fonksiyonlar –.length, koleksiyonun boyutu –.sort, koleksiyonun sıralanması –.comparator, koleksiyonun elemanlarının sırasını belirtmek için kullanılan karşılaştırma fonksiyonu –.where/findwhere, attribute hash'i kullanarak koleksiyonda arama –... 36http://www.scinetcentral.com/~mishchenko/MIT504.html

37 Backbone.js temelleri • Backbone "View" nesnesi, MVC'nin görünümlerinden biraz farklı olan, RIA'nin arayüzü organize etmek için bir araçtır. HTML ve CSS direkt olarak ayarlamayan, Backbone view'leri var olan HTML yapılarının düzenlenmesi ve olaylar kullanarak modellere bağlanaması ayarlar 37http://www.scinetcentral.com/~mishchenko/MIT504.html

38 Backbone.js temelleri AppView = Backbone.View.extend({ el: $("body"), initialize: function () { this.friends = new Friends( null, { view: this }); }, events: { "click #add-friend": "showPrompt", }, showPrompt: function () { var friend_name = prompt("Who is your friend?"); var friend_model = new Friend({ name: friend_name }); this.friends.add( friend_model ); }, addFriendLi: function (model) { $("#friends-list").append(" " + model.get('name') + " "); } }); • Bir arkadaş listesini ayrlayan uygulamanın View nesnesi

39 Backbone.js temelleri • View nesnesinin en önemli özellikleri: –.extend, view nesnesi üzerinde yeni view oluşturulması –.el, bu view tarafından ayarlanan sayfanın HTML elemanı –.initialize, oluşturulduğunda çalışacak yapıcı fonksiyonu –.events, view tarafından ayarlanan olayları –.template, view elemanında HTML şablonlama için kullanılacak şablonlama motoru –.render, model verilere göre ilgili HTML elemanı oluşturan fonksiyonu –... 39http://www.scinetcentral.com/~mishchenko/MIT504.html

40 Backbone.js temelleri • Backbone.js, RESTful arayüzleri üzerinde çalışan bir javascript çerçevesi • RESTful arayüzü, "/#/action/param/param" URL kullanarak haberleştirilen eylemler kullanan RIA- RIA veya RIA-sunucu iletişim bir model • RESTful isteklerinin örneği: – #help – #search/kiwis – #search/kiwis/p7 40http://www.scinetcentral.com/~mishchenko/MIT504.html

41 Backbone.js temelleri • Backbone, sunucu ile iletişimde RESTful arayüzünün kullanılmasını varsayır, mesela verileri veritabanına depolamak için veya veritabanından elde etmek için • Aynı zamanda Backbone, RIA içinde farklı işlemlerin başlatılması için #-adresler kullanarak RESTful isteklerinin kullanılmasına imkan sağlar • Bu tür istekleri yonlendirmek ve işletmek için, Backbone Router nesnesi kullanılır 41http://www.scinetcentral.com/~mishchenko/MIT504.html

42 Backbone.js temelleri var Workspace = Backbone.Router.extend({ routes: { "help": "help", // #help "search/:query": "search", // #search/kiwis "search/:query/p:page": "search" // #search/kiwis/p7 }, help: function() {... }, search: function(query, page) {... } }); 42http://www.scinetcentral.com/~mishchenko/MIT504.html • Backbone Router nesnesinin kullanımının örneği

43 Backbone.js örneği • TODO listesi uygulama ( ) • Yapısı: – Model: TODO listesinin elemanı – Collection: TODO listesinin tüm elemanları – View • TODO listesinin elemanın görünümü • TODO listesinin görünümü 43http://www.scinetcentral.com/~mishchenko/MIT504.html

44 TODO listesinin eleman modeli Todo = Backbone.Model.extend({ defaults: function() { return { title: "boş todo...", order: Todos.nextOrder(), done: false }; }, toggle: function() { this.save({done: !this.get("done")}); } }); 44http://www.scinetcentral.com/~mishchenko/MIT504.html

45 TODO listesinin elemanının koleksiyonu TodoList = Backbone.Collection.extend({ model: Todo, localStorage: new Backbone.LocalStorage("todos-backbone"), done: function() { return this.where({done: true}); }, remaining: function() { return this.where({done: false}); }, nextOrder: function() { if (!this.length) return 1; return this.last().get('order') + 1; }, comparator: 'order' }); 45http://www.scinetcentral.com/~mishchenko/MIT504.html

46 TODO listesinin elemanının görünümü TodoView = Backbone.View.extend({ tagName: "li", template: _.template($('#item-template').html()), events: { "click.toggle" : "toggleDone", "dblclick.view" : "edit", "click a.destroy" : "clear", "keypress.edit" : "updateOnEnter", "blur.edit" : "close" }, initialize: function() { this.listenTo(this.model, 'change', this.render); this.listenTo(this.model, 'destroy', this.remove); }, render: function() { this.$el.html(this.template(this.model.toJSON())); this.$el.toggleClass('done', this.model.get('done')); this.input = this.$('.edit'); return this; }, toggleDone: function() { this.model.toggle(); }, edit: function() { this.$el.addClass("editing"); this.input.focus(); }, close: function() { var value = this.input.val(); if (!value) this.clear(); else { this.model.save({title: value}); this.$el.removeClass("editing"); } }, updateOnEnter: function(e) { if (e.keyCode == 13) this.close(); }, clear: function() { this.model.destroy(); } }); 46http://www.scinetcentral.com/~mishchenko/MIT504.html

47 TODO listesi görünümü var AppView = Backbone.View.extend({ el: $("#todoapp"), statsTemplate: _.template($('#stats-template').html()), events: { "keypress #new-todo": "createOnEnter", "click #clear-completed": "clearCompleted", "click #toggle-all": "toggleAllComplete" }, initialize: function() { this.input = this.$("#new-todo"); this.allCheckbox = this.$("#toggle-all")[0]; this.listenTo(Todos, 'add', this.addOne); this.listenTo(Todos, 'reset', this.addAll); this.listenTo(Todos, 'all', this.render); this.footer = this.$('footer'); this.main = $('#main'); Todos.fetch(); }, render: function() { var done = Todos.done().length; var remaining = Todos.remaining().length; if (Todos.length) { this.main.show(); this.footer.show(); this.footer.html(this.statsTemplate({done: done, remaining: remaining})); } else { this.main.hide(); this.footer.hide(); } this.allCheckbox.checked = !remaining; }, addOne: function(todo) { var view = new TodoView({model: todo}); this.$("#todo-list").append(view.render().el); }, addAll: function() { Todos.each(this.addOne, this); }, createOnEnter: function(e) { if (e.keyCode != 13) return; if (!this.input.val()) return; Todos.create({title: this.input.val()}); this.input.val(''); }, clearCompleted: function() { _.invoke(Todos.done(), 'destroy'); return false; }, toggleAllComplete: function () { var done = this.allCheckbox.checked; Todos.each(function (todo) { todo.save({'done': done}); }); } }); 47http://www.scinetcentral.com/~mishchenko/MIT504.html

48 Backbone.js örneği • Arkadaş listesi uygulama (daha basit) ( e-introduction.html ) e-introduction.html • Yapısı: – Model: Arkadaş kaydı – Collection: Tüm arkadaşlar – View: Arkadaş listesi 48http://www.scinetcentral.com/~mishchenko/MIT504.html

49 TODO listesinin eleman modeli Friend = Backbone.Model.extend({ name: null }); 49http://www.scinetcentral.com/~mishchenko/MIT504.html

50 TODO listesinin elemanının koleksiyonu Friends = Backbone.Collection.extend({ initialize: function (models, options) { this.bind("add", options.view.addFriendLi);} }); 50http://www.scinetcentral.com/~mishchenko/MIT504.html

51 TODO listesinin elemanının görünümü AppView = Backbone.View.extend({ el: $("body"), initialize: function () { this.friends = new Friends( null, { view: this });}, events: { "click #add-friend": "showPrompt", }, showPrompt: function () { var friend_name = prompt("Who is your friend?"); var friend_model = new Friend({ name: friend_name }); this.friends.add( friend_model ); }, addFriendLi: function (model) { $("#friends-list").append(" " + model.get('name') + " ");} }); 51http://www.scinetcentral.com/~mishchenko/MIT504.html

52 Angular.js temelleri • Angular.js, şu anda daha az kullanılan ancak Google tarafından geliştirilen ve desteklenen jMVC çerçevesi dir • Angular.js, HTML templating (HTML şablonlama) üzerinde temel olarak çalışır 52http://www.scinetcentral.com/~mishchenko/MIT504.html

53 Angular.js temelleri • HTML şablonlama, bir ayrıştırıcı (parser) uygulama tarafından okunacak HTML koduna özel komutların ve ifadelerin eklenmesi dir • HTML şablonlama, birçok sunucu tarafı teknolojide zaten yaygın şekilde kullanılmakta, örneğin ASP, JSP, ve PHP (bir anlamda) hepsi HTML şablonlama kavramını kullanır • Angular.js, benzer yaklaşım direkt olarak kullanıcı tarafında RIA tarafından HTML'i ayralanması için kullanır 53http://www.scinetcentral.com/~mishchenko/MIT504.html

54 Angular.js HTML şablonlama Drivers Championship Standings {{$index + 1}} {{driver.Driver.givenName}} {{driver.Driver.familyName}} {{driver.Constructors[0].name}} {{driver.points}} 54http://www.scinetcentral.com/~mishchenko/MIT504.html

55 Angular.js HTML şablonlama Drivers Championship Standings {{$index + 1}} {{driver.Driver.givenName}} {{driver.Driver.familyName}} {{driver.Constructors[0].name}} {{driver.points}} 55http://www.scinetcentral.com/~mishchenko/MIT504.html

56 Angular.js temelleri • Angular'ın HTML şablonlama araçları, ifadeler (expressions) ve direktifler (directive) den oluşur 56http://www.scinetcentral.com/~mishchenko/MIT504.html

57 Angular.js temelleri • İfadeler, {{..}} arasında kapsanan javascript kodların parçalarıdır • Şablon ayrıştırılması zaman Angular ifadeleri yerine ilgili javascript kodlarının çıkışı yazılır • Bu şekilde oluşturulan HTML dosyası tarayıcı tarafından gösterilir 57http://www.scinetcentral.com/~mishchenko/MIT504.html

58 Angular.js HTML şablonlama Drivers Championship Standings {{$index + 1}} {{driver.Driver.givenName}} {{driver.Driver.familyName}} {{driver.Constructors[0].name}} {{driver.points}} 58http://www.scinetcentral.com/~mishchenko/MIT504.html

59 Angular.js temelleri • Direktifler, ng-app, ng-repeat gibi özel Angular komutlarıdır • Bunlar, ilgili HTML üzerinde belirli eylemin yapılması ortaya çıkar, örneğin ng- repeat="driver in driversList" direktifi bir driversList koleksiyonundaki tüm driver elemanları kullanarak tablonun satırlarını doldurur 59http://www.scinetcentral.com/~mishchenko/MIT504.html

60 Angular.js temelleri • MVC açısından, Angular.js Model için direkt olarak javascript kullanıyor, View olarak şablonlanmış HTML dosyasını kullanıyor, ve Controller olarak özel Controller nesnesini kullanıyor • Ayrıca, Modeller ve Angular şablonlaması kullanarak oluşturulan görünüm arasında iki taraflı olay bağlantıları oluşturulur, yani modelin değiştiğinde ilgili tablo otomatik olarak güncelleştirilecek 60http://www.scinetcentral.com/~mishchenko/MIT504.html

61 Angular.js temelleri • Angular'in yapılarının tartıştırmak için, step-guide-to-your-first-angularjs-app' deki örneği kullanarak, formula 1 yarışcılarının durumlarını gösteren bir uygulamaya step-guide-to-your-first-angularjs-app 61http://www.scinetcentral.com/~mishchenko/MIT504.html

62 Angular.js temelleri • İlgili uygulama iki görünü tanımlar: tüm yarışcıların durum tablosu ve bir yarışçının detaylı bilgileri • İlgili görünümleri iki Angular HTML şablonu ile tanımlanır 62http://www.scinetcentral.com/~mishchenko/MIT504.html

63 Yarışcılar tablosu görünümü Drivers Championship Standings {{$index + 1}} {{driver.Driver.givenName}} {{driver.Driver.familyName}} {{driver.Constructors[0].name}} {{driver.points}} 63http://www.scinetcentral.com/~mishchenko/MIT504.html

64 Yarışcılar tablosu görünümü Drivers Championship Standings {{$index + 1}} {{driver.Driver.givenName}} {{driver.Driver.familyName}} {{driver.Constructors[0].name}} {{driver.points}} 64http://www.scinetcentral.com/~mishchenko/MIT504.html Şablonu ve olayları yöneten Controller nesnesi Uygulama ismi Tablo dolduran direktif İlgili doldurulacak ifadeler

65 Yarışcı bilgisi görünümü {{driver.Driver.givenName}} {{driver.Driver.familyName}} Country: {{driver.Driver.nationality}} Team: {{driver.Constructors[0].name}} Birth: {{driver.Driver.dateOfBirth}} Biography 65http://www.scinetcentral.com/~mishchenko/MIT504.html

66 Yarışcı bilgisi görünümü {{driver.Driver.givenName}} {{driver.Driver.familyName}} Country: {{driver.Driver.nationality}} Team: {{driver.Constructors[0].name}} Birth: {{driver.Driver.dateOfBirth}} Biography 66http://www.scinetcentral.com/~mishchenko/MIT504.html Elemanı gösterme yöneten Angular direktifi İlgili doldurulacak ifadeler

67 Angular.js temelleri • Bizim Controller nesnesi, iki görünüm için verilerin sunucudan indirilmesini yönetir ve tabloda filtreme yönetir; aslında bu hedefler için iki ayrı controller tanımlanır 67http://www.scinetcentral.com/~mishchenko/MIT504.html

68 Yarışçı uygulamanın yönetici nesneleri angular.module('F1FeederApp.controllers', []).controller('driversController', function($scope, ergastAPIservice) { $scope.nameFilter = null; $scope.driversList = []; $scope.searchFilter = function (driver) { var re = new RegExp($scope.nameFilter, 'i'); return !$scope.nameFilter || re.test(driver.Driver.givenName) || re.test(driver.Driver.familyName); }; ergastAPIservice.getDrivers().success(function (response) { $scope.driversList = response.MRData.StandingsTable.StandingsLists[0].DriverStandings; }); }).controller('driverController', function($scope, $routeParams, ergastAPIservice) { $scope.id = $routeParams.id; $scope.races = []; $scope.driver = null; ergastAPIservice.getDriverDetails($scope.id).success(function (response) { $scope.driver = response.MRData.StandingsTable.StandingsLists[0].DriverStandings[0]; }); 68http://www.scinetcentral.com/~mishchenko/MIT504.html

69 Angular.js temelleri • Angular'ın herhangi bir Controller nesnesi, özel bir veri yapısı üzerinde çalışıyor, default olarak $scope diye adlandırılan. • Bu veri yapısı, belirli RIA ile ilgili tüm verileri içerir • Scope değişkenin kapsamı ng-app direktif kullanarak belirtilir. 69http://www.scinetcentral.com/~mishchenko/MIT504.html

70 Yarışçı uygulamanın yönetici nesneleri angular.module('F1FeederApp.controllers', []).controller('driversController', function($scope, ergastAPIservice) { $scope.nameFilter = null; $scope.driversList = []; $scope.searchFilter = function (driver) { var re = new RegExp($scope.nameFilter, 'i'); return !$scope.nameFilter || re.test(driver.Driver.givenName) || re.test(driver.Driver.familyName); }; ergastAPIservice.getDrivers().success(function (response) { $scope.driversList = response.MRData.StandingsTable.StandingsLists[0].DriverStandings; }); }).controller('driverController', function($scope, $routeParams, ergastAPIservice) { $scope.id = $routeParams.id; $scope.races = []; $scope.driver = null; ergastAPIservice.getDriverDetails($scope.id).success(function (response) { $scope.driver = response.MRData.StandingsTable.StandingsLists[0].DriverStandings[0]; }); 70http://www.scinetcentral.com/~mishchenko/MIT504.html

71 Angular.js temelleri • Controller verileri sunucudan, özel servisi kullanarak indirir 71http://www.scinetcentral.com/~mishchenko/MIT504.html

72 Yarışçı uygulamanın yönetici nesneleri angular.module('F1FeederApp.controllers', []).controller('driversController', function($scope, ergastAPIservice) { $scope.nameFilter = null; $scope.driversList = []; $scope.searchFilter = function (driver) { var re = new RegExp($scope.nameFilter, 'i'); return !$scope.nameFilter || re.test(driver.Driver.givenName) || re.test(driver.Driver.familyName); }; ergastAPIservice.getDrivers().success(function (response) {$scope.driversList = response.MRData.StandingsTable.StandingsLists[0].DriverStandings; }); }).controller('driverController', function($scope, $routeParams, ergastAPIservice) { $scope.id = $routeParams.id; $scope.races = []; $scope.driver = null; ergastAPIservice.getDriverDetails($scope.id).success(function (response) { $scope.driver = response.MRData.StandingsTable.StandingsLists[0].DriverStandings[0]; }); }); 72http://www.scinetcentral.com/~mishchenko/MIT504.html

73 Angular.js temelleri • Angular servisler, AJAX kullanan HTTP istek yapabilen araçlardır 73http://www.scinetcentral.com/~mishchenko/MIT504.html

74 Yarışçı uygulamanın yönetici nesneleri angular.module('F1FeederApp.services', []).factory('ergastAPIservice', function($http) { var ergastAPI = {}; ergastAPI.getDrivers = function() { return $http({ method: 'JSONP', url: 'http://ergast.com/api/f1/2013/driverStandings.json}); } ergastAPI.getDriverDetails = function(id) { return $http({ method: 'JSONP', url: 'http://ergast.com/api/f1/2013/drivers/'+ id +'/driverStandings.json' }); } return ergastAPI; }); 74http://www.scinetcentral.com/~mishchenko/MIT504.html

75 Angular.js temelleri • AJAX isteklerini uygulamak için, $http fonksiyonu kullanılır, ve iki veriler tipi indiren iki servis-fonksiyonu tanımlanır 75http://www.scinetcentral.com/~mishchenko/MIT504.html

76 Yarışçı uygulamanın yönetici nesneleri angular.module('F1FeederApp.services', []).factory('ergastAPIservice', function($http) { var ergastAPI = {}; ergastAPI.getDrivers = function() { return $http({ method: 'JSONP', url: 'http://ergast.com/api/f1/2013/driverStandings.json}); } ergastAPI.getDriverDetails = function(id) { return $http({ method: 'JSONP', url: 'http://ergast.com/api/f1/2013/drivers/'+ id +'/driverStandings.json' }); } return ergastAPI; }); 76http://www.scinetcentral.com/~mishchenko/MIT504.html

77 Angular.js temelleri • Backbone gibi, RIA içinde navigasyon için Angular RESTful kaynaklarının kullanımı önerir • İlgili RIA RESTful kaynakları tanımlamak için, Angular router nesnesi kullanılır 77http://www.scinetcentral.com/~mishchenko/MIT504.html

78 Yarışçı uygulamanın route tablosu angular.config(['$routeProvider', function($routeProvider) { $routeProvider. when("/drivers", {templateUrl: "yarıscı_tablosu.html", controller: "driversController"}). when("/drivers/:id", {templateUrl: "yarıscı_bilgileri.html", controller: "driverController"}). otherwise({redirectTo: '/drivers'}); }] ); 78http://www.scinetcentral.com/~mishchenko/MIT504.html

79 Angular.js temelleri • Tam olarak, Angular uygulaması bu şekilde oluşturuldu: – yarıscı_tablosu.html ve yarıscı_bilgileri.html ilgili şabonlanmış HTML dosyasını kullanarak belirtilmiş iki görünüm – AJAX kullanarak sunucudan verileri okuyan ve kullanıcı tarafında ilgili veri yapıları ayarlayan iki görünüm için driversController ve driverController iki yönetici nesnesi – Sunucu ile iletişimi ayarlayan ergastAPIservice servis nesnesi – RESTful route tablosu 79http://www.scinetcentral.com/~mishchenko/MIT504.html

80 Angular.js temelleri • Bunlar toplu olarak şu şekilde tanımlanır – Modüllerin tanımı: angular.module('F1FeederApp', [ 'F1FeederApp.services', 'F1FeederApp.controllers', 'ngRoute' ]). config(['$routeProvider', function($routeProvider) { $routeProvider. when("/drivers", {templateUrl: "partials/drivers.html", controller: "driversController"}). when("/drivers/:id", {templateUrl: "partials/driver.html", controller: "driverController"}). otherwise({redirectTo: '/drivers'}); }]); 80http://www.scinetcentral.com/~mishchenko/MIT504.html

81 Yarışçı uygulamanın yöneticisi angular.module('F1FeederApp.controllers', []).controller('driversController', function($scope, ergastAPIservice) { $scope.nameFilter = null; $scope.driversList = []; $scope.searchFilter = function (driver) { var re = new RegExp($scope.nameFilter, 'i'); return !$scope.nameFilter || re.test(driver.Driver.givenName) || re.test(driver.Driver.familyName); }; ergastAPIservice.getDrivers().success(function (response) {$scope.driversList = response.MRData.StandingsTable.StandingsLists[0].DriverStandings; }); }).controller('driverController', function($scope, $routeParams, ergastAPIservice) { $scope.id = $routeParams.id; $scope.races = []; $scope.driver = null; ergastAPIservice.getDriverDetails($scope.id).success(function (response) { $scope.driver = response.MRData.StandingsTable.StandingsLists[0].DriverStandings[0]; }); }); 81http://www.scinetcentral.com/~mishchenko/MIT504.html

82 Yarışçı uygulamanın AJAX servisi angular.module('F1FeederApp.services', []).factory('ergastAPIservice', function($http) { var ergastAPI = {}; ergastAPI.getDrivers = function() { return $http({ method: 'JSONP', url: 'http://ergast.com/api/f1/2013/driverStandings.json}); } ergastAPI.getDriverDetails = function(id) { return $http({ method: 'JSONP', url: 'http://ergast.com/api/f1/2013/drivers/'+ id +'/driverStandings.json' }); } return ergastAPI; }); 82http://www.scinetcentral.com/~mishchenko/MIT504.html

83 Uygulamanın ana dosyası F-1 Feeder 83http://www.scinetcentral.com/~mishchenko/MIT504.html

84 Yarışcılar tablosu görünümü Drivers Championship Standings {{$index + 1}} {{driver.Driver.givenName}} {{driver.Driver.familyName}} {{driver.Constructors[0].name}} {{driver.points}} 84http://www.scinetcentral.com/~mishchenko/MIT504.html

85 Yarışcı bilgisi görünümü {{driver.Driver.givenName}} {{driver.Driver.familyName}} Country: {{driver.Driver.nationality}} Team: {{driver.Constructors[0].name}} Birth: {{driver.Driver.dateOfBirth}} Biography 85http://www.scinetcentral.com/~mishchenko/MIT504.html

86 86


"IT504 Javascript MVC çerçeveleri Yrd. Doç. Dr. Yuriy Mishchenko." indir ppt

Benzer bir sunumlar


Google Reklamları