Tôi đang xây dựng một ứng dụng web AJAX với GWT và tôi muốn sử dụng nhấp chuột phải cho nhiều thứ khác nhau, giống như trong ứng dụng dành cho máy tính để bàn. Tuy nhiên, nhấn chuột phải vào trình đơn ngữ cảnh Web chuẩn và void onClick (sự kiện ClickEvent) sẽ không bao giờ được gọi. Có ai đã tìm ra cách để có được điều này để làm việc? cảm ơn!RIght-Click trong GWT?
Trả lời
Hóa ra bạn có thể làm điều đó bằng cách mở rộng DeckPanel
. Đây là một cuộc thảo luận tuyệt vời, cùng với một bản demo tuyệt vời chứng tỏ nó hoạt động.
http://whatwouldnickdo.com/wordpress/370/gwt-right-click-context-menu/
thats hiệu quả và sẽ nấc cục các ứng dụng phức tạp với nhiều đối tượng được hiển thị trên màn hình khi bạn không sử dụng công cụ sự kiện cốt lõi bên trong gwt. –
Mặc dù có nhiều cách để làm việc đó tôi tin rằng đội GWT đã có một cuộc tranh luận về vấn đề này và quyết định cho phép click chuột phải vào một ứng dụng web là một điều xấu và vì vậy đã quyết định ý thức không để hỗ trợ nó. Lập luận là nhấp chuột phải sẽ tiếp tục hoạt động như mong đợi (đưa lên trình đơn ngữ cảnh nhấp chuột phải của trình duyệt máy chủ) và ghi đè điều này đã phá vỡ hành vi mong đợi đó và điều đó và sẽ là thực hành không tốt. Trong khi tôi đã có trường hợp khi một trình đơn ngữ cảnh nhấp chuột phải sẽ hữu ích nói chung, tôi có xu hướng đồng ý với quyết định của nhóm GWT.
Tôi không thể không đồng ý nhiều hơn nữa. Tôi đoán rằng phần lớn các nhà phát triển GWT sử dụng GWT trong nỗ lực mô phỏng tốt hơn trải nghiệm trên máy tính để bàn. Và điều đó bao gồm các nhấp chuột theo ngữ cảnh (phải). Có rất nhiều ứng dụng dành cho doanh nghiệp, trong đó có ý nghĩa khi sử dụng các nhấp chuột phải. –
Tôi biết ý của bạn là gì, tôi khá thất vọng khi nhấp chuột phải bị thiếu lúc đầu nhưng sau khi đọc đối số của nhóm GWT tôi từ từ đi vòng. –
@Daniel Vaughan: Thú vị. Tôi sẽ bỏ phiếu này nếu bạn thêm một liên kết đến cuộc thảo luận GWT mà bạn đề cập đến. –
dễ dàng peasy, thêm một người nghe trên contextmenuhandler mà sẽ hiển thị một widget dựa trên nơi người dùng nhấp chuột phải. https://confluence.clazzes.org/pages/viewpage.action?pageId=425996
class MyWidget extends Composite implements ContextMenuHandler {
// just an example, use a meaningful Widget here...
private Widget base;
private PopupPanel contextMenu;
public MyWidget() {
// initialize base widget, etc...
this.contextMenu = new PopupPanel(true);
this.contextMenu.add(new HTML("My Context menu!"));
this.contextMenu.hide();
initWidget(this.base);
// of course it would be better if base would implement HasContextMenuHandlers, but the effect is the same
addDomHandler(this, ContextMenuEvent.getType());
}
public void onContextMenu(ContextMenuEvent event) {
// stop the browser from opening the context menu
event.preventDefault();
event.stopPropagation();
this.contextMenu.setPopupPosition(event.getNativeEvent().getClientX(), event.getNativeEvent().getClientY());
this.contextMenu.show();
}
}
Cuối cùng, bạn sẽ muốn tắt trình đơn trình duyệt vì quá tải đầy đủ loại trình đơn ngữ cảnh này. Điều đó sẽ hoạt động trong tất cả các trình duyệt ngoại trừ opera. nhưng một cách trung thực những người sử dụng rằng những ngày này neways^_______^
<body oncontextmenu="return false;">
Bạn nhận được một upvote cho
. Phần đó khiến tôi phát điên! – JamieĐó là phép thuật! Bạn không có ý tưởng bao nhiêu năm nó đã cho tôi để tìm ra rằng một trong những trở lại trước khi khuôn khổ JS ưa thích đã được xung quanh! –
nếu nó là bất kỳ sự giúp đỡ mà không ngăn chặn trình duyệt mặc định menu chuột phải, bạn có thể bắt một click chuột phải bằng cách sử dụng MouseDownHandler thay vì ClickHandler. – pistolPanties