Meteor.js Serisi : [Ara yazı] Bir Meteor Uygulamasının Temel Parçaları

Serimize devam ederken, Meteor platformunu daha iyi tanıma adına bir örnek uygulama yazarak devam edelim.  Meteor un bize sunduğu imkanlara ve en temel bileşenlerine genel olarak bakacağımız bu örnek ile aşağıdaki kavramlara değinmiş olacağız; (Meteorun resmi sitesindeki şemayı takip edeceğiz)

Bu 3 “ara” yazı ile , Meteoru her hangi bir tasarım kalıbı vs kullanmadan , yukarıdaki kavramların meteor içindeki yerine bakarakak tamamlayacağız. Dağıtıma çıkaracak bir uygulamadan ziyade, yukarıdaki başlıkları anlamaya çalışacağız.

Böylece Meteor ile daha düzenli, güvenli,  büyük ve Ölçeklenebilir uygulamalarla ilgili konuşmadan önce genel olarak hazırlığımızı da yapmış olacağız.

1. Creating an app –  Meteor ile uygulamamızı oluşturma

En kolay kısım olan proje oluşturma için, projemizi oluşturmak istediğiniz klasörün içinde, komut satırından ;

meteor create ornek

komutunu kullanarak, meteorun bizim için projemizi oluşturmasını sağlıyoruz.  Bu komutla birlikte, meteor bizim için ornek isimli bir klasör oluşturup bu klasör içinde gerekli dosyaları kopyalayacak. Ayrıca başlangıç için örnek olması adına, bir iki dosyayı da bizim için oluşturacak.

m1

şimdi tercih ettiğiniz editör ile , “ornek” klasörünü açarak devam edelim. (Visual Studio Code, Webstorm, Sublime vs. ) Editör seçimimiz bu örnek için çok önemli olmayacaktır. Sadece Javascript desteği iyi olan bir editör olursa biraz daha iyi olur, yoksa notepad ile de devam edebilrisiniz.

Aşağıdaki gibi bir dosya yapımız oluşacaktır. (eğer aşağıdakinden farklı bir yapı görüyorsanız, muhtemelen sistemizde yüklü olan meteor sürümü 1.3x sürümlerinden önceki bir sürümdür)

meteor doysa yapısı

Yukarıdaki yapı ile ilgili konuşmaya başlamadan önce, örnek klasörünün içindeyken, komut satırından önce;

npm install

sonra

meteor

komutlarıyla uygulamamızı çalıştırıp bakalım.  Meteor 1.3 sürümü ile birlikte direkt olarak npm  paketlerini kullanmamıza izin vermekte bu yüzden artık ana dizinde bir package.json dosyamız da oluşturuldu. Bu yüzden, bir kereliğine npm install komutu ile package.json dosyamızdaki ilgili paketleri inidiriyoruz. meteor komutu ise meteor u başlatacak komutumuz. meteor komutu ile bilrikte , Meteor bizim için, araka planda bir node.js sunucusu ve mongodb yi başlatılacak.

Aşağıdaki ne benzer bir görüntümüz olması lazım;

meteor başlat

Şimdi tarayıcınız dan , http://localhost:3000 adresini ziyaret edebilirisiniz;

meteor başlangıç ekranı

Tarayıcınız yukarıdaki sayfa ile sizi karşılayacaktır. şimdi tarayıcı açıkken , client/main.html içindeki 

<h1>Welcome to Meteor!</h1>

kısmını aşağıdaki gibi dğişitirp kaydedin.

<h2>Örnek meteor ugulama!</h2>

Meteor değişikliği otomatik olarak algılayacak ve  bağlı olan tüm istemcileri otomatik olarak güncelleyecektir. Meteor dünyasındaki ilk “Jargon” kelimiz olarak bu olaya “hot code push” demekteyiz. Meteor bağlı olan tüm istemcilerdeki kodu (mobil cihazlardakilerde dahil) otomatik olarak günceleyecektir.

meteor hot code push

Server ve Client Klasörleri

Meteor varsayılan olarak her hangi bir uygulama mimarisini zorunlu kılmamakta fakat , bazı klasör ve dosya isimlerinin özel anlamlarıyla karşımıza çıkmakta. Başka bir değişle bazı isimlendirmeler Meteor için özel anlam taşımaktalar. Bunların içinde en önemlisi şüphesiz Server ve Client klasörlerimiz.

Server Only – Sadece sunucuda çalışacak kodlarımız

Meteor içinde, server isimli kalasörümüz altında tutacağımız tüm kodlarımız (alt klasörler de dahil) sadece sunucu tarafında çalışacak (ve ayrıca hiç bir zaman istemcilere yollanmayacaktır.)

Client Only – Sadece istemcide çalışacak kodlarımız

Client klasöründeki kodlarımız ise sadece istemci tarafında erişilebilir olacaktır. Meteor dağıtım zamanında bunların hepsini tekbir dosya olarak “bundle” edip istemciye gönderecektir.

Bu iki klasör dışındaki her dosya yada klasör , hem istemci hem sunucu tarafında erişilebilir olacaktır. Hatırlarsanız, Meteorla ilgili önceki yazılarda, Meteorun “Isomorphic” bir yapıda yani , istersek hem istemcide hem suncuuda aynı kodu ve aynı API alt yapısını kullanamıza izin veren bir yapısı olduğunu belirtmiştik(Universal & Isomorphic JavaScript).

İşte bu yüzden yazacağınız bir Javascript dosyasını yukarıdaki iki klasör dışında bir yere koyacak olursanız(isimlendirme önemli olmadan) hem sunucuda hem istemcide çalışabilecektir. Meteorun bazı özelliklerini siz her hangi bişey yapmadan hem istemci tarafında hem sunucu tarafında her zaman kullanabilceğiz.(Mongo DB Query API gibi.)

Sunucu tarafında çalışacak kodlarımızı “server” klasörüne, istemci tarafında çalışacakları ise “client” klasöründe tutacağız dedik. Örneğin, Bootstrap CSS kütüphanesini düşünün, bootstrap tarayıcalarda çalışan bir kütüphane, yani sunucuda (node.js de) her hangi bir karşılığı olan bir kütüphane değil o yüzden doğal olarak istemci (client) tarafında tutulacaktır.

Başka bir örnek ise, Sequelize kütüphanesi. (SQL veritabanlarına bağlanmak için kullanabileceğimiz bir ORM kütüphanesi) sadece Node.js tarafında yani sunucu tarafında geçerli oalcaktır o yüzden Sequelize ile yazdığımız kodları doğal oalrak sunucu tarafında tutacağız.

Son olarak moment.js i düşünün, Javscript dünyasındaki en tanınmış ve başarılı tarih/zaman işlemelerin de kullanılan bir kütüphane. Bu kütüphane, hem istemci tarafında hem de sunucu tarafında kullanılabilir, dolayısıla ne server ne de client içinde değil bu iki klasörün dışında tutarak uygulamamızın tamamına erişilebilir kılabiliriz.

Yukarıdaki kavrama son olarak şunuda ekleyelim. Diyelimki, bir satış ekranında, vergi hesaplayan bir Javascript dosyamız/sınıfımız olsun, bu sınıfı hem tarayıcada hem sunucuda kullanmak istiyorsak, bu iki klasörün dışında tutmamız yeterli oalcaktır. Ayrıca, güvenlik ve gizlilik adına dikkat etmemiz gereken durumlar da olacak, bunları yeri geldiğinde tekrar konuşacağız.

Sonraki yazıda, ideal bir Meteor uygulamasının genel yapısını oluşturmak adına bir örneğimiz olacak. Şimdilik sadece Server ve Client klasörlerinin bu şekilde özel anlamları olduğunu bilerek devam edelim.

Yukarıda ve yazının geri kalanında “istemci/client” kavramını web tarayıcalar için kullanıldım(Chrome, Firefox vs.).  Mobile istemcileri (android vs) yada IOT istemcileri bu yazının konusunun dışında tutmaya çalıştım. Serinin devamında onlara da bakacağız. Bu yazıda istemciden kastım her zaman web tarayıcılar olacak.

Son olarak, uygulama yapımız içinde meteor create komutu ile otomatik oluşturulan “.meteor klasörüden kısaca bahsedelim. Bu klasör, Meteorun kendi iç sistemi için bir çok ayar ve konfigürasyonla birlikte bazı gerekli paketleri tutmakta.

Ne yaptığınızı bilmiyorsanız bu klasöre dokunmamak ilk başlarda en iyisi olacaktır. Yazının devamında biz, bu klasörü tekrar konuşacağız.

2. Templates – Html yapımız ve dinamik UI

Uygulamamızı oluşturduk ve genel olarak bir kaç kavramdan bahsettik, şimdi sıra “view” katmanı olarak adlandırdığımız html template lerimize bakmakta.

Meteorun varsayılan HTML/View alt yapısı “Blaze” isimli bir template sistemi. Blaze bize html yapımızı  kolayca oluşturmak adına bir çok imkan tanımakta. Eğer daha önce Handlebars kulllandıysanız, yada Ember.js le çalıştıysanız, size çok tanıdık gelecektir. İlk defa kullanacak olsanızda merak etmeyin çok hızlı bir öğrenme eğrisi var ve gayet kullanışlı bir template engine.

Meteor, Angular ve React ı da resmi olarak desteklemekte, ama blaze hem başlangıç için çok kolay hemde eğer React yada Angular ı kullanmak istemiyorsanız gayet iyi bir alternatif. Biz serinin geri kalanında muhtemelen React ı kullanacağız ama bu yazıda Blaze ile devam edeceğiz.

Blaze için bilmemiz gereken bir iki temel nokta var,

  1.  “template”  ler oluşturmamıza imkan vermekte.
  2. Jquery benzeri bir event handling DOM yönetimi sağlamakta.
  3. UI ı her değişiklikle birlikte otomatik olarak güncelemekte.

Örnek uygulamamızda ki tek html dosyamız “client/main.html” e bakarak devam edelim; İlk dikkatinizi çeken şey muhtemelen, bu dosya html dosyası olmasına rağmen, içinde standart bir html dosyasında olması gereken başlangıç ve bitiş tag lerinin eksikliği olmuştur.

<!doctype html>
<html lang="en">
</html>

Meteor, dahili bir Build Tool/İnşa Aracı ile birlikte geldiği için, bütün html dosyalarımızı, uygulamamız için compile edecektir. Bu süreç (compile/derleme) sayesinde uygulamamızdaki tüm html dosyalarımız dinamik hale dönüşütürülüp, meteor tarafından oluşturulacak(bu dosya çalışma zamanında otomatik oluşturulacaktır, biz projemizde bu dosyayi mevcut dosyalarimiz icinde göremeyeceğiz) “ana ” html dosyamıza gömülecektir. Dolayısıyla, meteor html dosyalarınız içinde

<!doctype html>
<html lang="en">
</html>

taglerini kullanmamıza izin vermemekte ve yazdığımız tüm html kodlarını otomatik olarak sonradan tek bir dosyada birleştirmektedir. Yine örnek projemizde, bir .css dosyamız var (client/main.css) bu css dosyasını açın ve aşağıdaki kodları yazın;

body{
    background: cadetblue;
}

css dosyamızı kaydettiğimizde meteor sayfamızı yenileycektir, sayfamızın arka plan renginin değiştiğini göreceğiz. Meteor un build sistemi, otomatik olarak, css dosyamızı buldu, ve biz bir linkleme yapmadan, sayfamıza “on the fly” derleme zamanında ekledi. Uygulamanızda kullancağınız css dosyalarımız da otomatik olarak meteor tarafından derlenip uygulamamıza dahil edeileceklerdir. Böylece hiç bir yerde aşağıdaki gibi bir tanımlama yapmamıza gerek kalmaaycaktır.

<link rel="stylesheet" href="./main.css">

Yine client klasörümüz içinde, main.js  isimli bir javascript dosyamız var, bu dosya client klasörümüzün altında olduğu için, sadece tarayıcaya /istemciye yollanacak ama tıpkı css ve html dosyalarımız için olduğu gibi, javascript dosyamız içinde her hangi bir linkleme vs yapmamıza gerek olmayacak, yani aşağıdaki gibi bir kullanıma gerek kalmayacak,

<script src="main.js"></script>

meteor build sistemi bizim için otomatik olarak gerekeni yapacak. Meteorun build sisteminden de bahsettiğimize göre, template ve blaze e bakmaya devam edelim.  Daha iyi anlayabilmek adına , main.html ve main.css içindeki herşeyi silelim. main html içinde sadece aşağıdaki kısım kalsın;

client/main.html

<head>
  <title>Örnek Meteor Uygulaması</title>
</head>

Birde, client klasörü altında “bootstrap.css” isimli bir css dosyası oluşturalım , uygulamamız biraz daha düzenlli gözükmesi için bootstrap ı kullanacağız. bootstrap.css dosyasına,  https://bootswatch.com/flatly/bootstrap.min.css

adresindeki css i kopyalayıp yapıştıralım. Böylece bootstrap uygulamamız için geçerli olmuş olacak. (kopyala yapıştırdan daha kolay yöntemlerimiz var ama şimdilik böyle devam edelim.)

Örnek uygulamamız bir ürün yönetme ekranı olsun (ürün ekle, sil vs.). İlk olarak ürünleri listeleyeceğimiz bir ekrana ihtiyacımız var. client klasörü altında, yeni bir klasör oluşturup bu klasörün için de “urunler.html isimli bir html dosyasi olusturalim. Ve İçeriğini aşağıdaki gibi yapalım;

client/urunler/urunler.html

<body>
   <div class="container">
     <h3>Urun Yonetim Sistemi</h3>
     <div class="row">
        {{> urunListe}}
        {{> urunDuzenle}}
   </div>
  </div>
</body>

urunler.html dosyamızı, biraz daha derli toplu olsun diye urunler isimli bir klasör altına koyduk, böylece uygulamamız içinde ürün le alaklı olan kısmı bu klasörün altında tutacağız.

urun.html e baktığımız zaman bir kaç satır normal html kodu ve 2 tane template import görmekdeyiz. Templatelerimizi yazmadan önce bir kaç önemli noktayı aydınlatalım. Meteorun dahili ve varsayılan, “template/html” alt yapısı olan  blaze bize uygulamamızın ara yüzünü (UI) template lere ayırmayi ve onları istediğimiz yerde import etme imkanı vermekte.

   {{> urunListe}}
   {{> urunDuzenle}}

Yukarıdaki iki satırla birlikte, blaze bu template importunu görüdüğü her yerde, ilgili template bulup sayfaya yazdıracak. “rendering“.  İki süslü parantez “{{ … }}” , blaze içinde özel anlam ifade etmekte. Tıpkı Angular gibi dinamik içeriklerimizi sayfaya yazmak için bu içerikleri “süslü parantezleri” kullanacağız. “{{ … }}

Template import etmek içinde, “{{> template_ismi }}” şeklinde bir kullanımız var. Şimdi uurunListe ve urunDuzenle isimli templatelerimizi yazalım.  urunler klasörünün içinde iki yeni html dosyası oluşturarak devam edelim.

client/urunler/urunListe.html

<template name="urunListe">
    <div class="col-md-7">
        <h4>Urun Listesi</h4>
        <table class="table table-bordered">
            <thead>
            <tr>
                <th>#</th>
                <th>Urun</th>
                <th>Fiyat</th>
                <th>Stok</th>
                <th>islemler</th>
            </tr>
            </thead>
            <tbody>
            <tr>
                <td>1</td>
                <td>Urun 1</td>
                <td>12</td>
                <td>5</td>
                <td>
                    <button class="btn-success btn btn-xs">Düzenle</button>
                    <button class="btn-danger btn btn-xs">Sil</button>
                </td>
            </tr>
            </tbody>
        </table>
    </div>
</template>

Yukarıdaki html dosyamızın normal bir html dosyasından tek farkı, html kodlarımızı “template” etiketleri içine almamız. Ve yine dikkat ettiyseniz, template etiketimizin bir de “uniqe/tekil” ismi var

<template name="urunListe">
...html kodlarımız...
</template>

İşte Meteor ve Blaze bu “tekil isimler” ile templatlerimizi bulup onları ilgili yere dahil edecek. Şimdi diğer templatimizi yazalım.

client/urunler/urunDuzenle.html

<template name="urunDuzenle">
    <div class="col-md-5">
        <h4>Urun Duzenle</h4>
        <form class="form-horizontal">
            <div class="form-group">
                <input type="text" name="urunIsmi" id="" class="form-control">
            </div>
            <div class="form-group">
                <input type="text" name="urunFiyat" id="" class="form-control">
            </div>
            <div class="form-group">
                <input type="text" name="urunStok" id="" class="form-control">
            </div>
            <button class="btn btn-success">Kaydet</button>
        </form>

    </div>
</template>

Böylelikle, urunler klasörümüzde iki templatimizi oluşturmuş olduk. (urunDuzenle ve urunListe). İsterseniz iki template de aynı dosyada tanımlayabilirsinsiniz, ama ayrı ayrı tutmak yönetmek adına daha kolay olacaktır. Sadece template lerimizin isimleri tekil olmalı, aynı ismi taşıyan birden fazla template tanımlayamayacağız.

Templatelerimizi i bu sekilde kaydettiginizde, ekranizda urunleri listeleyecegimiz bir tablo alanı ve ürün ekleme / düzenleme ekranı olarak kullabileceğimiz ikici bir kısımdan oluşan aşağıdakine benzer bir görüntü ile karşılacağız.

sonHal1

 

Şimdi son olarak, tablomuzdaki her bir ürünü de ayrı bir template ile ifade etmeye çalışalım. urunler klasörü altında “urun.html” isimli bir doysa daha oluşturup, tablomuzdaki ilgili kısmı oraya taşıyalım.

client/urunler/urun.html

<template name="urun">
    <tr>
        <td>1</td>
        <td>Urun 1</td>
        <td>12.23</td>
        <td>15</td>
        <td>
            <button class="btn btn-success btn-xs"> Duzenle</button>
            <button class="btn btn-danger btn-xs"> Sil</button>
        </td>
    </tr>

yukarıdaki değişiklikle birlikte, urunlerListe.html in içindeki tablomuzda ki  <tbody> kısmını şu şekilde değiştirebiliriz;

client/urunler/urunListe.html (yeni hal…)

<tbody>
{{> urun}}
</tbody>

Bu son eklememiz ile birlikte, uygulamamız içinde kullanacağımız, 3 blaze tamplate e sahip olduk.(urunListe, urunDuzenle ve urun) . Şimdi templatelerimize veri aktarmaya ve dinamik olarak bu templatelerimizi nasıl yönetebileceğimize bakalım.

Template.helpers() ve Template.events()

Blaze, templatelerimizi yönetebilmek ve onlara gerekli verileri taşıyabilmek için iki yardımcı metodu kullanmakta. Template lerimiz içinde, tüm olayları (events, tıklama vs.) yöneteceğimiz “template.events “ yardımcıları ve dinamik değişikliklerimiz ve veri taşıma için de “template.helpers

Şimdi, ürün listesini dinamik olarak almak için, ilk template helperimizi yazarak devam edelim. urunler  klasörü içinde “urunListe.js” isimli bir javascript dosyası oluşturarak devam edelim.(isimlendirme bu şekilde olmak zorunda değil tabi , ama kolayca anlaşılacağı gibi, urunListe.js dosyamız urunListe isimli templatimizi yönetecek.)

client/urunler/urunListe.js

import { Template } from 'meteor/templating';
import './urunListe.html';

Template.urunListe.helpers({
    urunler(){
        return [
            {id:1,urun:'urun 1', fiyat:12.25, stok:15},
            {id:2,urun:'urun 2', fiyat:15, stok:115},
            {id:3,urun:'urun 3', fiyat:3, stok:515}
        ]
    }

Yukarıda, hemen göze çarpan kısım muhtelemen, en baştaki “import” ifadelerimizdir. ilk importumuz;

import { Template } from 'meteor/templating';

Kısmı ile, meteorun template yönetimi için bize sağladığı ilgili global template sınıfını kullanacağımızı belirtiyoruz. (Teknik olarak bir Javascript Object) ikinci import ile ;

import './urunListe.html';

hangi template i yöneteceğimizi belirtmiş oluyoruz. Sonraki tanımlama ise ;

Template.urunListe.helpers({ ….. });

urunListe templatemiz çin helper tanımlaması yapmaya başladığımız kısım.

Meteor un yukarıda bahsettiğimiz, “build/inşa” aracı, çalışma zamanı için bütün templatelerimizi, Template isimli bir javascript nesnesi altında tutacak. Dolayısıyla biz, ihtiyaç duyduğumuzda, istediğimiz template ve onun alt elemanlarına bu Template sınıfı altından(Template.template_ismi  seklinde) ulaşabileceğiz.

Templatelerimiz üzerinde helpers() altında oluşturduracağımız tüm meteodları, html içinde kullanabilmekteyiz. Aşağıdaki metoda bakalım,

urunler(){
    return [
        {id:1,urun:'urun 1', fiyat:12.25, stok:15},
        {id:2,urun:'urun 2', fiyat:15, stok:115},
        {id:3,urun:'urun 3', fiyat:3, stok:515}
    ]
}

urunler() isimli metodumuz ile, template içinde kullanabileceğimiz bir ürün grubunu oluşuturp template e aktarmış olduk. Artık, bu urunleri, ilgili temmplate içinde, şu şekilde kullanabiliriz.

client/urunler/urunListe.html

<tbody>
{{#each urunler}} // döngüye başla
  {{> urun}}   // her bir ürün için bu templati yazdır
{{/each}} // döngü bitiş
</tbody>

Yukarıdaki yapida, iki temel işlemi gerçekleştirmiş olduk, ilki : bir döngü bloğu oluşturmak, böylece ürünler listesi her bir ürün için ilgili urun template i yazdırabieceğiz. İkinci olarak da artık ürünlerimizi dinamik olarak javascript taraflı almaya başladık.

Yazının devamında bu verileri veri tabanımızdan alana kadar bu şekliyle kullanmaya devam edelim. Şimdi yukarıdaki kod a biraz daha yakından bakalım;

{{#each urunler}}

kısmı ile, blaze içinde döngü oluşturma yadımcısı olan each meteodunu kullandık, ve parametre olarak da  helper metodumuzu ( urunler() ) verdik. Başka bir değişle, bu metod çalışınca bize içindeki ürün listesini döndüreceği için, ürünleri sağlamış olduk.

each bloğu içinde {{> urun}}  ile de her bir ürün için ilgili template i yazdırmış olduk. Blaze bizim için döngüdeki her ürün için (bizim örneğimizde 3 tane) bu template i yazıdaracak, ayrıca her bir ürünü bu template e bir veri olarak aktaracak. Başka bir değişle, artık urun template imiz içinde, aşağıdaki gibi bu ürünü kullanabileceğiz.

<td>{{id}}</td> 
<td>{{urun}}</td>
<td>{{fiyat}}</td>
<td>{{stok}}</td>

Dikkat ettiyseniz, blaze her bir ürünü buraya geçtiği için, ürün nesnesinin alt parçalarını direkt olarak kullanabildik. Blaze in sağladığı kolaylıklardan biri de bu diyebiliriz.

{{#each urunler}} // her bir urun icin asagidaki template i yazdir
  {{> urun}}  // {id:n , urun:'', fiyat:'',stok:''} 
{{/each}} // döngü bitiş

Bu haliyle tarayıcıya bakacak olursak, aşağdaıkine benzer bir görüntümüz olacak;

urun liste blaze

Blaze ile uı işlemleri gerçekten kolay ve sade, örneğimize devam ettikçe ilgili parçaları kullanarak Blazei tanımaya devam edeceğiz. Şimdilik bizim için önemli olan iki konuya baktığımız için (template import ve template.helpers) artık Collections ve Form işlemlerine geçebiliriz.

Olay Yakalama ve Template.events() yardımcısını form işlemleri ve Collections konusu ile pratikte görerek öğreneceğiz.

 

3. Collections – Koleksiyonlarımız

client/urunler/urunListe.js

 

4 thoughts on “Meteor.js Serisi : [Ara yazı] Bir Meteor Uygulamasının Temel Parçaları

    1. Ben Teşekkür ederim. ikinci kısmı bitirmek üzereyim, yarın yada salı günü yayınlarım inş.
      Kolay Gelsin.

  1. Çok açıklayıcı bir yazı olmuş, devamını bende bekliyorum teşekkürler.

    bir konu aklıma takıldı, anladığım kadarıyla blaze hızlı ve kolay bir view engine , neden React Yada Angular ı kullanarak devam edeceksiniz?

    Yeni bir projede Blaze yerine React yada Angular kullanmak daha mı mantıklı?

    1. Blaze, yeterli bir view engine olsada, Angular ve React ekosistemiyle yarışamaycakdır. Bir de Meteor buil tool, React ve Angular 2 ile çalışma konusunda çok ciddi kolaylık sağlamakta. Bir iki paketi indirip hemen kullanmaya başlayabiliyorsunuz.

      React ve Angular 2 için bir başka artı da, component bazında subscription imkanı vermeleri. Bundan sonra büyük ihtimal internette bir çok örnek React veya angular ile karşınıza çıkacaktır.(Özellikle React). Meteor takımı blaze i desteklemeye ve geliştirmeye devam edeceğini bir çok kez belirtti, yani hala Blaze sorunsuz oalrak kullanılabilir.

      Bana göre bir çok proje için Blaze hala uygun, özellikle React ve Angular 2 öğrenmek istemeyenler için.

Leave a Reply

Your email address will not be published. Required fields are marked *