每当编辑器尝试保存具有某些值的组件(在这种情况下为过去的日期字段)时,我都会出现一个模式弹出窗口。
在这个弹出窗口中,我向编辑器展示了一些选项(非常类似于默认的“打开共享项目”对话框)和一个确定/取消按钮组合。在取消时,我触发“取消”事件,编辑器返回编辑屏幕,一切都很好。在“确定”上,我想更改字段的值以匹配编辑器选择的任何内容,然后保存。
我尝试使用 FieldBuilder 和在其他主题中提到的示例 Boris 的方法, 但我无法从弹出对话框中进入该字段。
关于如何从模式弹出窗口中修改项目(也可能是页面)的 xml 的任何建议?
编辑: getControlForFieldName 中使用的代码
function getControlForFieldName(name) {
var fieldBuilder = $display.getView().properties.controls.fieldBuilder;
var fieldsContainer = fieldBuilder.properties.input;
var fieldsNode = fieldsContainer.getElement();
var fieldContainer = $dom.getFirstElementChild(fieldsNode);
while (fieldContainer) {
var labelNode = $dom.getFirstElementChild(fieldContainer);
var fieldNode = $dom.getNextElementSibling(labelNode);
var control = fieldNode.control;
if (control.getFieldName() == name) {
return control;
}
fieldContainer = $dom.getNextElementSibling(fieldContainer);
}
}
编辑#2
在 Frank 的建议和 Jaime & Frank 离线的一些帮助之后,我让它按如下方式工作:
- 从命令扩展调用弹出窗口(在我的情况下保存并关闭)
- command.js 指定了一个在“提交”时调用的事件处理程序(== OK 被按下)
$evt.addEventHandler(p.dialogPopup, "submit",
this.getDelegate(this._onPopupSubmit));
在我的弹出窗口中,我将所选项目(它是关键字 ID)传递给事件处理程序:
this.fireEvent("submit", { id: select.options[select.selectedIndex].value });
现在回到事件处理程序_onPopupSubmit(e)
,我刚刚读取 e.data.id,加载此关键字,获取 ID 和标题等属性,并使用 item.setMetadata("new metadata with updated values") 更新项目的元数据。
简单的 :)