是否可以使用@NotifyChange而不是BindUtils.postNotifyChange?

时间:2013-11-14 12:01:41

标签: java model-view-controller mvvm zk zul

我在@NotifyChange和BindUtils.postNotifyChange之间有一个混淆,为什么要使用这两个事件。在我读这个问题之前 In ZK Can we PostNotifyChange more than one variables。 但是我无法理解这个问题为什么要使用这个多个变量。

以下是一个例子:

    @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之间的一个事件。这个方法有可能吗?

1 个答案:

答案 0 :(得分:3)

1)如果此呼叫在任何情况下都未更改与"isDisabled"关联的变量,则无需执行此操作。
但也许它在loadFolderInfoList()内发生了变化 2)您可以想象@NotifyChange({"arg1","arg2",...,"argN"})

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

3)但只要您获得对VM的引用,您就可以从任何地方呼叫BindUtils.postNotifyChange(...) 4)对我看来,这段代码来自FolderInfoEditViewModel的嵌套类,它本身就是VM和FolderInfoEditViewModel
在这种情况下,为嵌套类调用@NotifyChage(...)

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

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

相关问题