Templates এর মধ্যে Iteration এবং Conditionals

KnockoutJS এর Template Binding - নকআউটজেএস (KnockoutJS) - Web Development

321

KnockoutJS একটি শক্তিশালী JavaScript লাইব্রেরি যা MVVM (Model-View-ViewModel) ডিজাইন প্যাটার্ন অনুসরণ করে এবং ডেটা-বাইন্ডিং সিস্টেমের মাধ্যমে ওয়েব অ্যাপ্লিকেশনগুলির মধ্যে ডেটা এবং UI এর মধ্যে সম্পর্ক স্থাপন করে। KnockoutJS তে Template Binding ব্যবহার করে আপনি dynamic content এবং conditional rendering সহ iteration (looping) পরিচালনা করতে পারেন।

এই গাইডে আমরা KnockoutJS Templates এর মধ্যে Iteration এবং Conditionals ব্যবহারের বিস্তারিত আলোচনা করব।


1. KnockoutJS Template Binding:

Template Binding হল KnockoutJS এর একটি শক্তিশালী বৈশিষ্ট্য, যা HTML টেমপ্লেটের মাধ্যমে ডাইনামিক কন্টেন্ট প্রদর্শন করতে ব্যবহৃত হয়। এর মাধ্যমে আপনি observable arrays এর মাধ্যমে বিভিন্ন আইটেম লুপ করতে এবং conditionals এর মাধ্যমে নির্দিষ্ট কন্টেন্ট প্রদর্শন করতে পারেন।

Template Binding উদাহরণ:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>KnockoutJS Template Binding</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.5.1/knockout-min.js"></script>
</head>
<body>

    <h2>KnockoutJS Template Binding Example</h2>

    <div data-bind="template: {name: 'fruitTemplate', foreach: fruits}"></div>

    <script type="text/html" id="fruitTemplate">
        <div>
            <p data-bind="text: $data"></p>
        </div>
    </script>

    <script>
        function AppViewModel() {
            this.fruits = ko.observableArray(["Apple", "Banana", "Orange", "Grapes"]);  // Observable array for fruits
        }

        ko.applyBindings(new AppViewModel());  // Apply bindings
    </script>

</body>
</html>

এখানে:

  • Template Binding ব্যবহার করে fruitTemplate টেমপ্লেটের মাধ্যমে fruits observable array এর সমস্ত আইটেম রেন্ডার করা হয়েছে।
  • foreach ব্যান্ডিংটি fruits array এর প্রতিটি আইটেমের জন্য টেমপ্লেট লুপ করবে এবং তা প্রদর্শন করবে।

2. Iteration (Looping) with Template Binding:

KnockoutJS তে iteration বা looping করার জন্য foreach binding ব্যবহার করা হয়। এটি array বা collection এর প্রতিটি আইটেমের উপর কাজ করে এবং নির্দিষ্ট HTML টেমপ্লেটকে প্রতিটি আইটেমের জন্য রেন্ডার করে।

Iteration (Looping) উদাহরণ:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>KnockoutJS Iteration Example</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.5.1/knockout-min.js"></script>
</head>
<body>

    <h2>KnockoutJS Iteration Example</h2>

    <ul data-bind="foreach: fruits">
        <li data-bind="text: $data"></li>
    </ul>

    <script>
        function AppViewModel() {
            this.fruits = ko.observableArray(["Apple", "Banana", "Orange", "Grapes"]);  // Observable array for fruits
        }

        ko.applyBindings(new AppViewModel());  // Apply bindings
    </script>

</body>
</html>

এখানে:

  • foreach binding এর মাধ্যমে KnockoutJS fruits observable array এর প্রতিটি আইটেম লুপ করে একটি <li> ট্যাগের মধ্যে প্রদর্শন করবে।
  • $data ব্যবহার করে প্রত্যেক আইটেমকে টেমপ্লেটে প্রদর্শন করা হয়েছে।

Using Indexed Iteration (With Index):

<ul data-bind="foreach: {data: fruits, as: 'fruit', index: 'fruitIndex'}">
    <li data-bind="text: fruit + ' is at index ' + fruitIndex"></li>
</ul>

এখানে:

  • index ব্যবহার করে প্রতিটি আইটেমের ইনডেক্স পাওয়া যাচ্ছে, যা fruitIndex দ্বারা অ্যাক্সেস করা হচ্ছে।

3. Conditionals in KnockoutJS with Template Binding:

KnockoutJS তে conditionals বা শর্তসাপেক্ষ ভিত্তিতে ডেটা প্রদর্শন করতে if এবং ifnot bindings ব্যবহার করা হয়। এটি ব্যবহার করে আপনি নির্দিষ্ট শর্তে UI রেন্ডার করতে পারেন।

Conditionals উদাহরণ (if and ifnot):

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>KnockoutJS Conditionals Example</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.5.1/knockout-min.js"></script>
</head>
<body>

    <h2>KnockoutJS Conditionals Example</h2>

    <div data-bind="if: isVisible">
        <p>This content is visible because isVisible is true!</p>
    </div>

    <button data-bind="click: toggleVisibility">Toggle Visibility</button>

    <script>
        function AppViewModel() {
            this.isVisible = ko.observable(true);  // Observable for visibility

            // Method to toggle visibility
            this.toggleVisibility = () => {
                this.isVisible(!this.isVisible());  // Toggle between true and false
            };
        }

        ko.applyBindings(new AppViewModel());  // Apply bindings
    </script>

</body>
</html>

এখানে:

  • if binding ব্যবহার করা হয়েছে, যার মাধ্যমে isVisible observable এর মান যদি true হয়, তবে <div> এলিমেন্ট রেন্ডার হবে।
  • toggleVisibility মেথডে ক্লিক করলে isVisible এর মান পরিবর্তিত হবে এবং UI আপডেট হবে।

Conditionals with ifnot:

<div data-bind="ifnot: isVisible">
    <p>This content is visible because isVisible is false!</p>
</div>

এখানে:

  • ifnot ব্যবহার করা হয়েছে, যা isVisible যদি false হয়, তখন HTML এলিমেন্টটি রেন্ডার করবে।

4. Combining Iteration and Conditionals:

KnockoutJS তে foreach এবং if / ifnot binding একসাথে ব্যবহার করে আপনি ডেটার উপর ভিত্তি করে শর্তসাপেক্ষ তালিকা প্রদর্শন করতে পারেন।

Combining Iteration and Conditionals উদাহরণ:

<ul data-bind="foreach: fruits">
    <li data-bind="text: $data, visible: $data !== 'Banana'"></li>
</ul>

এখানে:

  • foreach binding এর মাধ্যমে সব ফলের নাম প্রদর্শন করা হচ্ছে এবং visible binding ব্যবহার করে Banana ফলটি না দেখানোর শর্ত দেওয়া হয়েছে।

KnockoutJS তে Templates এর মাধ্যমে Iteration এবং Conditionals ব্যবহার করে আপনি সহজেই ডাইনামিক এবং ইন্টারঅ্যাকটিভ কন্টেন্ট তৈরি করতে পারেন।

  • foreach দিয়ে আপনি অ্যারে বা লিস্ট এর আইটেম লুপ করতে পারেন।
  • if এবং ifnot দিয়ে আপনি শর্তসাপেক্ষে UI উপাদান রেন্ডার করতে পারেন।
  • KnockoutJS Templates ব্যবহার করে ডেটা-বাইন্ডিং এর মাধ্যমে ডাইনামিক UI তৈরি করা সহজ হয় এবং আপনার ওয়েব অ্যাপ্লিকেশনকে আরও ইন্টারঅ্যাকটিভ এবং ব্যবহারকারী বান্ধব করে তোলে।
Content added By
Promotion

Are you sure to start over?

Loading...