30/09/2018, 17:32

Cách sử dụng event và event có phải là thể hiện của delegate không?

Mình đang tìm hiểu về event. Bạn nào rảnh thì có thể giảng thêm cho mình được không tại mình thấy mình vẫn còn khá mơ hồ.

Nguyễn Phú viết 19:47 ngày 30/09/2018

mình không hiểu câu hỏi của bạn? chi tiết hơn đi

GodOfGod viết 19:41 ngày 30/09/2018

Câu hỏi của bạn khá mơ hồ. Bạn nên search google để biết thêm thông tin chi tiết.

Sơn viết 19:45 ngày 30/09/2018

Cho mình hỏi về cách sử dụng event nhé và event có phải là thể hiện của delegate không.

Võ Hoài Nam viết 19:43 ngày 30/09/2018

Mình sẽ nói về event theo cách hiểu của mình dựa trên sự kiện của JavaScript (có lẽ bạn muốn ứng dụng nó vào C#). Event đơn giản là một sự kiện gì đó. Giống như trong hình, một cú click chuột là một event Khi bạn click, sẽ có một Event Loop lắng nghe sự kiện và sẽ gọi hàm xử lý tương ứng.

Ví dụ như bạn đi câu cá. Người câu là một Event Loop có nhiệm vụ là lắng nghe khi nào cần câu giật. Con cá là chủ thể kích hoạt sự kiện câu (1). Người câu cá nhận tín hiệu (2) và giựt dây câu (3). Kết quả là con cá đã được kéo lên khỏi mặt nước (4).

Cơ bản là khi bạn làm lập trình Windows Forms, Web (phía giao diện) thì bạn luôn làm việc với Event. Bạn muốn nhấn vào nút Login thì sẽ đăng nhập -> viết một cái hàm xử lý sự kiện đăng nhập. Ban muốn nhấn nút X thì cửa sổ đóng -> viết hàm xử lý sự kiện đóng cửa sổ. Bạn muốn mỗi lần có một ai đó viết một status thì sẽ báo Notifications trên New Feed -> viết một sự kiện lắng nghe dữ liệu từ Server, Một số ví dụ nêu ra nãy giờ là dùng Event ở những chỗ nào

Event có phải thể hiện của Delegate không thì mình không rành. Không dám bàn.

Nguyễn Phú viết 19:44 ngày 30/09/2018

@vhnam

###Event
là sự lắng nghe những sự kiện sẽ xảy ra trong ứng dụng:

  • trong form có thể là sự kiện click, submit, change, mouse move, …
  • trong background thì có thể là sự kiện 1 client kết nối tới server, sự kiện khi có 1 record mới đuọc insert, …

###Delegate
là sự kết nối 1 hoặc nhiều sự kiện(event) đến 1 hoặc nhiều hàm xử lý (handlers)
(sự kết nối ở đây cũng có thể hiểu là sự tham chiếu - reference)

  • Mình cũng chỉ rành JS nên không biết các ngôn ngữ khác thế nào.
    trong JS thì delegation sử dụng rất nhiều, nó giúp việc gắn sự kiện và hàm xử lý lên 1 or nhiều đối tượng dễ dàng hơn.
    1 ví dụ dễ nhất:
/* mình muốn gắn sự kiện click vào tất cả tag li trong tag ul
		<ul>
			<li>menu 1</li>
			<li>menu 2</li>
			<li>menu 3</li>
			<li>menu 4</li>
			<li>menu 5</li>
			<li>menu 6</li>
		</ul>
*/

function clickLi(event, context) {
// xử lý khi click vào tag LI
}

// cách 1
var items = document.getElementsByTagName("li");
for(var _i=0; _i < items.length; _i++) {
	items[_i].addEventListener('click', clickLi);
}

// cách 2
document.getElementsByTagName('ul')[0].addEventListener("click", function(e) {
	if(e.target && e.target.nodeName == "LI") {
		clickLi(e, this);
	}
});

với cách 1 mình mình gắn mỗi li 1 event

  • cách 2 mình gắn 1 lần trên ul

[Note] Mình nghĩ bạn post câu hỏi này nên ghi rõ bạn hỏi cái gì trong ngôn ngữ nào hoặc dùng tag thì dễ cho người trả lời hơn. Cùng 1 khái niệm đôi khi có sự khác biệt giữ các ngôn ngữ.

Sơn viết 19:48 ngày 30/09/2018

Mình sẽ nói về event theo cách hiểu của mình dựa trên sự kiện của JavaScript (có lẽ bạn muốn ứng dụng nó vào C#). Event đơn giản là một sự kiện gì đó. Giống như trong hình, một cú click chuột là một event Khi bạn click, sẽ có một Event Loop lắng nghe sự kiện và sẽ gọi hàm xử lý tương ứng.

Ví dụ như bạn đi câu cá. Người câu là một Event Loop có nhiệm vụ là lắng nghe khi nào cần câu giật. Con cá là chủ thể kích hoạt sự kiện câu (1). Người câu cá nhận tín hiệu (2) và giựt dây câu (3). Kết quả là con cá đã được kéo lên khỏi mặt nước (4).

Cơ bản là khi bạn làm lập trình Windows Forms, Web (phía giao diện) thì bạn luôn làm việc với Event. Bạn muốn nhấn vào nút Login thì sẽ đăng nhập -> viết một cái hàm xử lý sự kiện đăng nhập. Ban muốn nhấn nút X thì cửa sổ đóng -> viết hàm xử lý sự kiện đóng cửa sổ. Bạn muốn mỗi lần có một ai đó viết một status thì sẽ báo Notifications trên New Feed -> viết một sự kiện lắng nghe dữ liệu từ Server, Một số ví dụ nêu ra nãy giờ là dùng Event ở những chỗ nào

Event có phải thể hiện của Delegate không thì mình không rành. Không dám bàn.

Event

là sự lắng nghe những sự kiện sẽ xảy ra trong ứng dụng:+ trong form có thể là sự kiện click, submit, change, mouse move, …+ trong background thì có thể là sự kiện 1 client kết nối tới server, sự kiện khi có 1 record mới đuọc insert, …

Delegate

là sự kết nối 1 hoặc nhiều sự kiện(event) đến 1 hoặc nhiều hàm xử lý (handlers)(sự kết nối ở đây cũng có thể hiểu là sự tham chiếu - reference)- Mình cũng chỉ rành JS nên không biết các ngôn ngữ khác thế nào.trong JS thì delegation sử dụng rất nhiều, nó giúp việc gắn sự kiện và hàm xử lý lên 1 or nhiều đối tượng dễ dàng hơn.1 ví dụ dễ nhất:

/* mình muốn gắn sự kiện click vào tất cả tag li trong tag ul
<ul>
<li>menu 1</li>
<li>menu 2</li>
<li>menu 3</li>
<li>menu 4</li>
<li>menu 5</li>
<li>menu 6</li>
</ul>
*/

function clickLi(event, context) {
// xử lý khi click vào tag LI
}

// cách 1
var items = document.getElementsByTagName(“li”);
for(var _i=0; _i < items.length; _i++) {
items[_i].addEventListener(‘click’, clickLi);
}

// cách 2
document.getElementsByTagName(‘ul’)[0].addEventListener(“click”, function(e) {
if(e.target && e.target.nodeName == “LI”) {
clickLi(e, this);
}
});

với cách 1 mình mình gắn mỗi li 1 event- cách 2 mình gắn 1 lần trên ul

[Note] Mình nghĩ bạn post câu hỏi này nên ghi rõ bạn hỏi cái gì trong ngôn ngữ nào hoặc dùng tag thì dễ cho người trả lời hơn. Cùng 1 khái niệm đôi khi có sự khác biệt giữ các ngôn ngữ.

Cảm ơn các bạn nha. Ví dụ rất cụ thể, mình cũng hiểu thêm rồi, chỉ tại óc mình bé quá.

Võ Hoài Nam viết 19:34 ngày 30/09/2018

Không cần thiết phải quote lại… kéo chuột mệt mỏi quá đi à

Bài liên quan
0