You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 2-ui/2-events/03-event-delegation/article.md
+11-12
Original file line number
Diff line number
Diff line change
@@ -1,7 +1,7 @@
1
1
2
-
# پنرن Event delegation
2
+
# پترن Event delegation
3
3
4
-
کپچر (capture) و bubbling ایونت ها به ما این توانایی را میدهد که از یکی از قویترین الگوهای کنترل ایونت هندلینگ یعنی *event delegation* استفاده کنیم.
4
+
گرفتن (capture) و bubbling ایونت ها به ما این توانایی را میدهد که از یکی از قویترین الگوهای ایونت هندلینگ یعنی *event delegation* استفاده کنیم.
5
5
6
6
ایده این است که اگر تعداد زیادی المنت داریم و میخواهیم به یک شکل آنها رو هندل کنیم به جای اینکه به تک تک آنها هندلر مجزا اختصاص دهیم، یک هندلر را برای المنت والد مشترک آنها اختصاص میدهیم.
7
7
@@ -36,7 +36,7 @@
36
36
37
37
به جای آنکه هندلر `onclick` را به هریک از تگ های `<td>` اساین کنیم (که ممکن است تعداد زیادی از آنها داشته باشیم)، هندلر "catch-all" را برروی المنت `<table>` اساین میکنیم.
38
38
39
-
اینکار باعث استفاده از `event.target` برای گرفتن المنت کلیک شده و هایلایت آن میشود.
39
+
این عمل از `event.target` برای پیدا کردن المنت کلیک شده و هایلایت آن استفاده میکند.
40
40
41
41
کد:
42
42
@@ -62,7 +62,7 @@ function highlight(td) {
62
62
}
63
63
```
64
64
65
-
این کد به اینکه چند سلول داخل جدول قرار دارد اهمیتی نمیدهد. میتوانیم المنتهای `<td>` رو به شکل دینامیکی هر زمان که خواستیم اضافه/کم کنیم و همچنان هایلایت کردن کار خواهد کرد.
65
+
این کد به اینکه چند سلول داخل جدول قرار دارد اهمیتی نمیدهد. میتوانیم المنتهای `<td>` رو به شکل دینامیکی هر زمان که خواستیم اضافه/کم کنیم و همچنان هایلایت کار خواهد کرد.
1. متد `elem.closest(selector)` نزدیکترین المنت به سلکتور را برمیگرداند. در این مسئله ما در مسیر از سورس المنت به بالا به دنبال المنت `<td>` هستیم.
104
-
2. اگر `event.target` درون هیچ `<td>`نباید آنگاه فراخوانی تابع بلافاصله برمیگردد. درست مانند آنکه چیزی برای انجام دادن وجود ندارد.
104
+
2. اگر `event.target` درون هیچ `<td>`نباشد آنگاه فراخوانی تابع بلافاصله برمیگردد. درست مانند آنکه چیزی برای انجام دادن وجود ندارد.
105
105
3. در مسئله جدولهای تودرتو `event.target` ممکن است یک المنت `<td>` باشد که خارج از جدول مورد نظر ما قرار گرفته است بنابراین نیاز است بررسی کنیم که المنت آیا درون جدول موردنظر ما قرار دارد یا نه.
خب، استفاده از الگوی delegation اینجا برای ما چه فایدهای دارد؟
167
167
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 منعطف خواهد بود، میتوانیم دکمهها را هر زمان که خواستیم اضافه/کم کنیم.
171
171
```
172
172
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 ها هم استفاده کنیم.
174
174
175
175
## الگوی "behavior"
176
176
@@ -191,7 +191,7 @@ One more counter: <input type="button" value="2" data-counter>
if (event.target.dataset.counter!=undefined) { //if the attribute exists...
194
+
if (event.target.dataset.counter!=undefined) { //در صورتی که اتریبیوت وجود داشته باشد..
195
195
event.target.value++;
196
196
}
197
197
@@ -201,10 +201,9 @@ One more counter: <input type="button" value="2" data-counter>
201
201
202
202
اگر بر روی یک دکمه کلیک کنیم مقدار آن افزایش مییابد. اینجا روش کلی مهم است نه دکمه ها.
203
203
204
-
ممکن است هر تعداد اتریبیوت با مقدار `data-counter` که بخواهیم داشته باشیم. هر زمان که بخواهیم میتوانیم یکی دیگه اضافه کنیم. با استفاده از الگوی event delegation با افزودن یک اتریبیوت که بیانگر رفتاری جدید است HTML را گسترش دادیم.
204
+
ممکن است هر تعداد اتریبیوت با مقدار `data-counter` که بخواهیم داشته باشیم. هر زمان که بخواهیم میتوانیم یکی دیگه اضافه کنیم. با استفاده از الگوی event delegation با افزودن یک اتریبیوت که بیانگر رفتاری جدید است HTML را گسترش دادهایم.
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.
208
207
زمانی که یک ایونت هندلر را به آبجکت `document` اختصاص میدهیم، همواره باید از `addEventListener` استفاده کنیم، نه `document.on<event>` چون دومی موجب کانفلیکت خواهد شد: هندلرهای جدید جایگزین قدیمیها خواهند شد.
209
208
210
209
برای پروژههای واقعی طبیعتا ممکن است هندلرهای زیادی روی `document` در قسمتهای مختلف کد تعریف شده باشد.
0 commit comments