不允许将 GWT addValueChangeHandler 添加到 RichTextBox,需要另一种方法

GWT addValueChangeHandler to RichTextBox is not allowed, an alternative way required

我在更改 RichTextBox 并退出 RichTextBox 后尝试更新数据库(即,我不想强​​迫用户按 "Update button" ).但是,我的代码在第一行抛出异常 The method addValueChangeHandler(new ValueChangeHandler<String>(){}) is undefined for the type RichTextArea

                             textBoxExistingDescription.addValueChangeHandler(new ValueChangeHandler<String>() {
                                public void onValueChange(ValueChangeEvent<String> event) {

                                    //If a record for this Youth Member specific detail line exists then update it else add it.
                                    if (ymAwardDetails.getYmsdId() != null) {
                                        AsyncCallback<Void> callback = new YMSpecificHandler<Void>(ScoutAwardView.this);
                                        rpc.updateYMSpecific(ymAwardDetails.getYmsdId(), ymAwardDetails.getYmsdDetail(), callback);
                                    }else{
                                        AsyncCallback<Void> callback = new YMSpecificHandler<Void>(ScoutAwardView.this);
                                        rpc.addYMSpecific(youthMemberID, ymAwardDetails.getAdId(), ymAwardDetails.getYmsdDetail(), callback);
                                    }
                                }
                            });

请问还有其他方法吗?

看看你的要求,我认为你也可以通过实施 addBlurHandler() 而不是 addValueChangeHandler() 来实现同样的目标。

Blur 事件 在组件失去焦点时触发。有关模糊事件的更多信息,请阅读this

有关 GWT BlurEvent 的信息,请阅读 this

首先,添加普通的 ValueChangeHandler(即使它在那里)会导致您的用户每次键入 1 个单个字符时都发送一个数据库请求,如果您问我,这是一个很大的开销

每次失去焦点时保存一个备份可能会更好,但有一种情况是用户没有点击开箱并且仍然以某种方式关闭了选项卡,这是non-pleasant。

我的建议是:

  1. 子class RichTextArea:

    public class MyRichTextArea 扩展 RichTextArea 实现 HasValueChangeHandlers {

        @Override
        public HandlerRegistration addValueChangeHandler(ValueChangeHandler<String> handler) {
            return this.addHandler(handler, ValueChangeEvent.getType());
        }
    
    }
    
  2. 在子class内创建一个定时器字段。

  3. 在 RichTextBox 的构造函数中添加 keyDown 事件处理程序:

如果计时器是 运行 - 再延长 3 秒,否则启动计时器。

当 3 秒计时器完成而没有进一步的按键时 - 触发服务调用以保存您的文本。我就是这样做的