Người nghe sự kiện có nên được gọi nếu nó được đính kèm sau khi sự kiện đã được kích hoạt? Nếu sự kiện sẽ chỉ bị sa thải một lần thì sao?
Ví dụ đầu tiên xuất hiện trong đầu là ready
sự kiện trong jQuery. Đoạn mã sau, khi được đánh giá sau khi trang được tải, vẫn sẽ gọi lại cuộc gọi lại:
$(document).ready(function () {
console.log("Works.");
});
Thay thế cho hành vi này có thể là cờ được đặt khi trang được tải, buộc người tiêu dùng API phải kiểm tra xem sự kiện đã xảy ra chưa và hành động tương ứng:
if (document.readyState == "complete") {
console.log("Works.");
} else {
$(document).ready(function () {
console.log("Works.");
});
}
Mặc dù ví dụ trên nằm trong bối cảnh tải trang web, nơi mọi thứ và mọi thứ (thường) cần phải xảy ra sau khi trang được tải hoàn toàn, các đối số tương tự có thể được tạo cho bất kỳ thành phần nào trong ứng dụng có các sự kiện "đơn lẻ" ( load
, start
, end
, vv). Một ví dụ về một thành phần có thể là một bản đồ với một load
sự kiện kích hoạt để chỉ định rằng bản đồ đã được tải :
map.on("load", function () {
console.log("The map has loaded.");
});
Ví dụ trên xuất phát từ API ArcGIS cho JavaScript, trong đó sự kiện đó chỉ được kích hoạt một lần và nếu người tiêu dùng "chờ" bản đồ tải sau khi bản đồ đã được tải, người nghe sẽ không bao giờ được gọi. Kết quả mong muốn yêu cầu kiểm tra trạng thái của bản đồ trước khi người nghe được đính kèm:
if (map.loaded) {
console.log("The map has loaded.");
} else {
map.on("load", function () {
console.log("The map has loaded.");
});
}
Hành vi nào là đúng, yêu cầu người tiêu dùng kiểm tra xem một sự kiện đã được kích hoạt hay luôn gọi lại cuộc gọi lại?
Subject
so vớiReplaySubject
, trong đó phần sau phát lại các sự kiện trước đó cho người đăng ký muộn trong khi phần trước thì không. Đó là, những người tạo ra Rx đã mô hình hóa cả hai hành vi thay vì quyết định một hành vi xác định. - Và trong khi các liên kết ở trên đi đến tài liệu của phiên bản Rx '.NET, thì cũng có Rx cho JavaScript .