3

我在 @NotifyChange 和 BindUtils.postNotifyChange 之间有一个混淆使用,为什么要使用这两个事件。在我阅读这个问题之前 在 ZK 我们可以 PostNotifyChange 多个变量。但我无法理解这个问题,为什么要使用多个变量。

这是一个例子:

    @Command
    @NotifyChange({ "folderInfoList", "isDisabled", "selectedFolderInfo" })
    public void refreshFolderInfo() {
        logger.debug("Refresh Icon selected");
        if (isDirty()) {
            Messagebox.show(pageResourceBundle.getText("JS_CONFIRM_DATAMODIFED"), pageResourceBundle.getText("JS_CONFIRM_DATAMODIFED_TYPE"),
                    Messagebox.OK | Messagebox.CANCEL, Messagebox.QUESTION, new EventListener<Event>() {
                        public void onEvent(Event event) throws Exception {
                            if (Messagebox.ON_OK.equals(event.getName())) {
                                loadFolderInfoList();
                                selectedFolderInfo = null;
                                BindUtils.postNotifyChange(null, null, FolderInfoEditViewModel.this, "folderInfoList");
                            } else {

                            }
                        }
                    });
        } else {
            loadFolderInfoList();
            selectedFolderInfo = null;
        }
    }

谁能告诉我:

我有四个问题:

1.为什么在 @NotifyChange 中使用 isDisabled ?

2.这个方法我可以使用@NotifyChange 代替BindUtils.postNotifyChange 吗?

3.@NotifyChange 和 BindUtils.postNotifyChange 有什么区别?

4.我想在方法中这两个@NotifyChange和BindUtils.postNotifyChange之间只使用一个事件。这种方法可以吗?

4

1 回答 1

3

1)如果与关联的变量"isDisabled"在任何情况下都没有被这个调用改变,你不需要。
但也许它在里面改变了loadFolderInfoList()
2) 你可以想象 a@NotifyChange({"arg1","arg2",...,"argN"})是一样的

for(String arg : args){ 
  BindUtils.postNotifyChange(null, null, refToClassCalledFrom, arg); 
}

3) 但是BindUtils.postNotifyChange(...)只要你有对 VM 的引用,你就可以从任何地方调用。
4)在我看来,这段代码来自一个嵌套类FolderInfoEditViewModel,它本身就是 VM 以及FolderInfoEditViewModel.
在这种情况下,@NotifyChage(...)为嵌套类调用了,但是

BindUtils.postNotifyChange(null, null, FolderInfoEditViewModel.this, "folderInfoList");

指的是它的外部类FolderInfoEditViewModel,只能以这种方式归档。

于 2013-11-15T16:34:03.993 回答