Skip to content

Commit 4c13ae8

Browse files
committed
wip: update article.md -- event delegation
1 parent ebbd92c commit 4c13ae8

File tree

1 file changed

+11
-12
lines changed

1 file changed

+11
-12
lines changed

2-ui/2-events/03-event-delegation/article.md

+11-12
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11

2-
# پنرن Event delegation
2+
# پترن Event delegation
33

4-
کپچر (capture) و bubbling ایونت ها به ما این توانایی را میدهد که از یکی از قویترین الگوهای کنترل ایونت هندلینگ یعنی *event delegation* استفاده کنیم.
4+
گرفتن (capture) و bubbling ایونت ها به ما این توانایی را میدهد که از یکی از قویترین الگوهای ایونت هندلینگ یعنی *event delegation* استفاده کنیم.
55

66
ایده این است که اگر تعداد زیادی المنت داریم و میخواهیم به یک شکل آنها رو هندل کنیم به جای اینکه به تک تک آنها هندلر مجزا اختصاص دهیم، یک هندلر را برای المنت والد مشترک آنها اختصاص میدهیم.
77

@@ -36,7 +36,7 @@
3636

3737
به جای آنکه هندلر `onclick` را به هریک از تگ های `<td>` اساین کنیم (که ممکن است تعداد زیادی از آنها داشته باشیم)، هندلر "catch-all" را برروی المنت `<table>` اساین میکنیم.
3838

39-
اینکار باعث استفاده از `event.target` برای گرفتن المنت کلیک شده و هایلایت آن می‌شود.
39+
این عمل از `event.target` برای پیدا کردن المنت کلیک شده و هایلایت آن استفاده می‌کند.
4040

4141
کد:
4242

@@ -62,7 +62,7 @@ function highlight(td) {
6262
}
6363
```
6464

65-
این کد به اینکه چند سلول داخل جدول قرار دارد اهمیتی نمیدهد. میتوانیم المنت‌های `<td>` رو به شکل دینامیکی هر زمان که خواستیم اضافه/کم کنیم و همچنان هایلایت کردن کار خواهد کرد.
65+
این کد به اینکه چند سلول داخل جدول قرار دارد اهمیتی نمیدهد. میتوانیم المنت‌های `<td>` رو به شکل دینامیکی هر زمان که خواستیم اضافه/کم کنیم و همچنان هایلایت کار خواهد کرد.
6666

6767
اما همچنان یک اشکال وجود دارد.
6868

@@ -101,7 +101,7 @@ table.onclick = function(event) {
101101

102102
توضیحات:
103103
1. متد `elem.closest(selector)` نزدیک‌ترین المنت به سلکتور را برمیگرداند. در این مسئله ما در مسیر از سورس المنت به بالا به دنبال المنت `<td>` هستیم.
104-
2. اگر `event.target` درون هیچ `<td>` نباید آنگاه فراخوانی تابع بلافاصله برمیگردد. درست مانند آنکه چیزی برای انجام دادن وجود ندارد.
104+
2. اگر `event.target` درون هیچ `<td>` نباشد آنگاه فراخوانی تابع بلافاصله برمیگردد. درست مانند آنکه چیزی برای انجام دادن وجود ندارد.
105105
3. در مسئله جدول‌های تودرتو `event.target` ممکن است یک المنت `<td>` باشد که خارج از جدول مورد نظر ما قرار گرفته است بنابراین نیاز است بررسی کنیم که المنت آیا درون جدول موردنظر ما قرار دارد یا نه.
106106
4. و اگر چنین است آنگاه هایلایتش کن.
107107

@@ -165,12 +165,12 @@ table.onclick = function(event) {
165165

166166
خب، استفاده از الگوی delegation اینجا برای ما چه فایده‌ای دارد؟
167167

168-
```compare
169-
+ We don't need to write the code to assign a handler to each button. Just make a method and put it in the markup.
170-
+ The HTML structure is flexible, we can add/remove buttons at any time.
168+
```مقایسه
169+
+ نیازی به نوشتن کد برای اختصاص دادن یک هندلر به هریک از دکمه‌ها نداریم. فقط یک متد مینویسیم و در مارک‌آپ قرار می‌دهیم.
170+
+ ساختار HTML منعطف خواهد بود، می‌توانیم دکمه‌ها را هر زمان که خواستیم اضافه/کم کنیم.
171171
```
172172

173-
We could also use classes `.action-save`, `.action-load`, but an attribute `data-action` is better semantically. And we can use it in CSS rules too.
173+
همچنین میتوانیم از کلاس‌های `action-save`، `action-load` استفاده کنیم. اما از لحاط سمنتیک اتریبیوت `data-action` بهتر است. به علاوه می‌توانیم از آن در CSS rule ها هم استفاده کنیم.
174174

175175
## الگوی "behavior"
176176

@@ -191,7 +191,7 @@ One more counter: <input type="button" value="2" data-counter>
191191
<script>
192192
document.addEventListener('click', function(event) {
193193
194-
if (event.target.dataset.counter != undefined) { // if the attribute exists...
194+
if (event.target.dataset.counter != undefined) { // در صورتی که اتریبیوت وجود داشته باشد..
195195
event.target.value++;
196196
}
197197
@@ -201,10 +201,9 @@ One more counter: <input type="button" value="2" data-counter>
201201

202202
اگر بر روی یک دکمه کلیک کنیم مقدار آن افزایش می‌یابد. اینجا روش کلی مهم است نه دکمه ها.
203203

204-
ممکن است هر تعداد اتریبیوت با مقدار `data-counter` که بخواهیم داشته باشیم. هر زمان که بخواهیم میتوانیم یکی دیگه اضافه کنیم. با استفاده از الگوی event delegation با افزودن یک اتریبیوت که بیانگر رفتاری جدید است HTML را گسترش دادیم.
204+
ممکن است هر تعداد اتریبیوت با مقدار `data-counter` که بخواهیم داشته باشیم. هر زمان که بخواهیم میتوانیم یکی دیگه اضافه کنیم. با استفاده از الگوی event delegation با افزودن یک اتریبیوت که بیانگر رفتاری جدید است HTML را گسترش داده‌ایم.
205205

206206
```warn header="For document-level handlers -- always `addEventListener`"
207-
When we assign an event handler to the `document` object, we should always use `addEventListener`, not `document.on<event>`, because the latter will cause conflicts: new handlers overwrite old ones.
208207
زمانی که یک ایونت هندلر را به آبجکت `document` اختصاص میدهیم، همواره باید از `addEventListener` استفاده کنیم، نه `document.on<event>` چون دومی موجب کانفلیکت خواهد شد: هندلرهای جدید جایگزین قدیمی‌ها خواهند شد.
209208

210209
برای پروژه‌های واقعی طبیعتا ممکن است هندلرهای زیادی روی `document` در قسمت‌های مختلف کد تعریف شده باشد.

0 commit comments

Comments
 (0)