Yazılım Mimarileri ve Tasarım Desenleri Üzerine

KnockoutJS Template Yapısı

Bu yazımızda KnockoutJS kütüphanesinde Template yapısını inceleyeceğiz.Konuyu desteklemek amaçlı KnockoutJS’de dizi mantığından ve foreach yapısından faydalanacağız.

Hemen örnek amaçlı bir insanı modelleyen bir data oluşturalım.

    function Insan(Ad, Soyad, Memleket) {
        return {
            Ad: Ad,
            Soyad: Soyad,
            Memleket: Memleket
        };
    }

Şimdide bu datayı yapılandıracağımız ViewModel katmanımızı oluşturalım.

    function VMInsan() {
        Insanlar = ko.observableArray
            ([
                Insan("Selman", "Candemir", "Yozgat"),
                Insan("Gençay", "Yıldız", "Artvin"),
                Insan("Ahmet", "Yalçın", "Ankara")
            ]);
    }

Dikkat ederseniz eğer bir dizi yapısı oluşturmuş olduk.Bu dizi yapısını KnockoutJS kütüphanesinin observableArray metoduyla oluşturuyoruz. “ko.observableArray” komutunu kullanırken daha esnek bir yapı isterseniz eğer aşağıdaki gibi bir kullanımıda tercih edebilirsiniz.

    function VMInsan() {
        var InsanDizisi = new Array
            (
                Insan("Selman", "Candemir", "Yozgat"),
                Insan("Gençay", "Yıldız", "Artvin"),
                Insan("Ahmet", "Yalçın", "Ankara")
            );

        Insanlar = ko.observableArray(InsanDizisi);
    }

Velhasıl bu sizin tercihinize kalmış.

Şimdi buraya kadar bir insanı modelleyen data ve o datayı dizisel biçimde manipüle eden ViewModel katmanı oluşturmuş olduk.Şimdi KnockoutJS mimarisinin template yapısını kullanarak bu array yapısını listeletelim.

<h2>İnsanlar(<label data-bind="text: Insanlar().length"></label>)</h2>
<table style="width:50%;">
    <tbody data-bind="template: { name: 'TemplateInsanListesi', foreach: Insanlar }"></tbody>
</table>

<script id="TemplateInsanListesi" type="text/html">
    <tr>
        <td style="width:30%;" data-bind="text: Ad"></td>
        <td style="width:30%;" data-bind="text: Soyad"></td>
        <td data-bind="text: Memleket"></td>
    </tr>
</script>

Şimdi yukarıdaki kod bloğu sayesinde ViewModelimizde oluşturmuş olduğumuz Insan datalarıyla dolu Array yapımızı KnockoutJS Template yapısıyla listelemiş olduk.Yaptığımız işlemi satır satır izah etmek gerekirse;

Yaptığımız çalışmanın derlenmiş halinin ekran çıktısı aşağıdaki gibi olacaktır.

Örneğimizde kullanmış olduğumuz tüm komutların derlenmiş hali,

<!DOCTYPE html>
<html>
<head>
    <script src="~/Scripts/jquery-2.1.4.min.js"></script>
    <script src="~/Scripts/knockout-3.3.0.js"></script>
</head>
<body>
    <h2>İnsanlar(<label data-bind="text: Insanlar().length"></label>)</h2>
<table style="width:50%;">
    <tbody data-bind="template: { name: 'TemplateInsanListesi', foreach: Insanlar }"></tbody>
</table>

<script id="TemplateInsanListesi" type="text/html">
    <tr>
        <td style="width:30%;" data-bind="text: Ad"></td>
        <td style="width:30%;" data-bind="text: Soyad"></td>
        <td data-bind="text: Memleket"></td>
    </tr>
</script>

<script type="text/javascript">

    function Insan(Ad, Soyad, Memleket) {
        return {
            Ad: Ad,
            Soyad: Soyad,
            Memleket: Memleket
        };
    }

    function VMInsan() {
        var InsanDizisi = new Array
            (
                Insan("Selman", "Candemir", "Yozgat"),
                Insan("Gençay", "Yıldız", "Artvin"),
                Insan("Ahmet", "Yalçın", "Ankara")
            );

        Insanlar = ko.observableArray(InsanDizisi);

    }

    $(document).ready(function () {
        ko.applyBindings(VMInsan);
    });
</script>
</body>
</html>

Sonraki yazılarımda görüşmek üzere…

İyi çalışmalar…

Exit mobile version