ExtJS এ Tree Store এবং Nested Data ব্যবহার করে আপনি একটি ডাইনামিক ট্রি স্ট্রাকচার তৈরি করতে পারেন, যেখানে ডেটা হায়ারার্কিক্যাল (উপর-নিচ) আকারে উপস্থাপিত হয়। এটি সাধারণত ফাইল সিস্টেম, ক্যাটেগরি বা অন্যান্য হায়ারার্কিক্যাল ডেটার জন্য ব্যবহৃত হয়। Tree Store ডেটাকে পরিচালনা করতে ব্যবহৃত হয়, এবং এটি Model ও Proxy এর মাধ্যমে ডেটা লোড ও ম্যানেজ করতে সহায়ক।
এই গাইডে আমরা Tree Store তৈরি এবং Nested Data লোড করার পদ্ধতি দেখবো।
Tree Store ExtJS এ একটি স্টোর যা tree data structure কে ম্যানেজ করে। এটি parent-child relationships সহ ডেটা লোড এবং ম্যানেজ করার জন্য ব্যবহৃত হয়।
Ext.define('MyApp.store.TreeStore', {
extend: 'Ext.data.TreeStore',
model: 'MyApp.model.TreeNode', // মডেলটি TreeNode
proxy: {
type: 'memory', // মেমরি প্রক্সি, ডেটা সরাসরি কোডে লোড হবে
reader: {
type: 'json', // JSON ফরম্যাটে ডেটা রিড
rootProperty: 'children' // JSON ডেটার মূল অংশ
}
},
root: {
text: 'Root', // রুট নোডের টেক্সট
expanded: true, // রুট নোডটি এক্সপ্যান্ডেড থাকবে
children: [
{ text: 'Child 1', leaf: true },
{ text: 'Child 2', leaf: true },
{ text: 'Child 3', expanded: true, children: [
{ text: 'Grandchild 1', leaf: true },
{ text: 'Grandchild 2', leaf: true }
]}
]
}
});
extend: 'Ext.data.TreeStore'
: এটি TreeStore
কে প্রসারিত (extend) করে।proxy: { type: 'memory' }
: এখানে memory
প্রক্সি ব্যবহার করা হয়েছে, যেটি ডেটা সরাসরি কোডে লোড করবে (এটি অস্থায়ী ডেটা স্টোরেজের মতো কাজ করবে)।root
: রুট নোড এবং এর উপরের children। এখানে প্রতিটি নোডের জন্য টেক্সট, এক্সপ্যান্ডেড অবস্থা, এবং তার সন্তান (children) নির্ধারণ করা হয়েছে।TreeStore ব্যবহার করার জন্য একটি Model তৈরি করতে হবে, যা প্রতিটি নোডের ডেটা নির্ধারণ করবে।
Ext.define('MyApp.model.TreeNode', {
extend: 'Ext.data.Model',
fields: [
{ name: 'text', type: 'string' }, // নোডের টেক্সট
{ name: 'leaf', type: 'boolean' }, // যদি নোডটি লিফ (leaf) হয়
{ name: 'expanded', type: 'boolean' } // এক্সপ্যান্ডেড নোড
]
});
text
: নোডের টেক্সট।leaf
: এটি নিশ্চিত করে যে নোডটি একটি পাতার (leaf) নোড কিনা।expanded
: এটি নির্দেশ করে যে নোডটি ডিফল্টভাবে এক্সপ্যান্ডেড থাকবে কি না।ট্রি ডেটা প্রদর্শনের জন্য TreePanel
কম্পোনেন্ট ব্যবহার করা হয়। এটি Tree Store এর সাথে যুক্ত হয়ে ডেটা দেখানোর কাজ করে।
Ext.create('Ext.tree.Panel', {
title: 'Tree Example',
width: 400,
height: 300,
store: {
type: 'tree', // স্টোর টাইপ 'tree' হবে
model: 'MyApp.model.TreeNode', // এই মডেলটি ব্যবহার করা হবে
root: {
text: 'Root',
expanded: true,
children: [
{ text: 'Node 1', leaf: true },
{ text: 'Node 2', expanded: true, children: [
{ text: 'Child 1', leaf: true },
{ text: 'Child 2', leaf: true }
]}
]
}
},
rootVisible: false, // রুট নোডটি ভিজিবল হবে না
renderTo: Ext.getBody()
});
এখানে:
store
: এটি TreeStore ব্যবহার করছে, যার মধ্যে রুট এবং তার সন্তান (children) অন্তর্ভুক্ত।rootVisible: false
: রুট নোডটি UI তে প্রদর্শন হবে না, শুধুমাত্র তার সন্তানেরা (children) দেখানো হবে।প্রকৃত জীবনে, ট্রি ডেটা সাধারণত nested JSON ফরম্যাটে আসে। আপনি যদি সার্ভার থেকে ডেটা নিয়ে আসেন, তাহলে এটি JSON ফরম্যাটে থাকে যা parent-child relationship দেখায়।
{
"text": "Root",
"expanded": true,
"children": [
{ "text": "Node 1", "leaf": true },
{ "text": "Node 2", "expanded": true, "children": [
{ "text": "Child 1", "leaf": true },
{ "text": "Child 2", "leaf": true }
]}
]
}
Ext.define('MyApp.store.TreeStore', {
extend: 'Ext.data.TreeStore',
model: 'MyApp.model.TreeNode',
proxy: {
type: 'ajax', // AJAX মাধ্যমে সার্ভার থেকে ডেটা ফেচ
url: '/treeData', // সার্ভার থেকে JSON ডেটা লোড করার URL
reader: {
type: 'json',
rootProperty: 'children' // JSON ডেটায় children কে রুট হিসেবে ব্যবহার
}
},
root: {
text: 'Root',
expanded: true
}
});
এখানে:
type: 'ajax'
: AJAX পদ্ধতি ব্যবহার করে ডেটা লোড করা হচ্ছে।url: '/treeData'
: সার্ভার থেকে ডেটা ফেচ করার URL।reader
: JSON ডেটা থেকে children
অংশ রিড করার জন্য rootProperty
কনফিগার করা হয়েছে।ExtJS এর TreeStore ব্যবহার করে CRUD (Create, Read, Update, Delete) অপারেশন করা যায়।
var store = Ext.getStore('MyApp.store.TreeStore');
store.getRoot().appendChild({
text: 'New Node',
leaf: true
});
var node = store.getNodeById('nodeId');
node.set('text', 'Updated Node');
var node = store.getNodeById('nodeId');
node.remove();
এই পদ্ধতিগুলির মাধ্যমে আপনি খুব সহজে ডাইনামিক, ইন্টারেক্টিভ এবং হায়ারার্কিক্যাল ডেটা ডিসপ্লে করতে পারবেন।
Read more