Tridion 安圭拉-从弹出窗口更新字段值?

Tridion 安圭拉-从弹出窗口更新字段值?,tridion,Tridion,我有一个模式弹出窗口,每当编辑器试图用一些值保存一个组件时,就会出现在过去的日期字段中(在本例中) 在这个弹出窗口中,我向编辑器显示了一些非常类似于默认的“打开共享项”对话框和“确定/取消”按钮组合的选项。在Cancel时,我触发Cancel事件,编辑器返回编辑屏幕,这里一切正常。在OK上,我想更改字段的值以匹配编辑器选择的内容,然后保存 我尝试使用FieldBuilder和上面提到的示例Boris的方法,但我无法从弹出对话框进入字段 关于如何修改项目的xml的任何建议也可以是来自模式弹出窗口的

我有一个模式弹出窗口,每当编辑器试图用一些值保存一个组件时,就会出现在过去的日期字段中(在本例中)

在这个弹出窗口中,我向编辑器显示了一些非常类似于默认的“打开共享项”对话框和“确定/取消”按钮组合的选项。在Cancel时,我触发Cancel事件,编辑器返回编辑屏幕,这里一切正常。在OK上,我想更改字段的值以匹配编辑器选择的内容,然后保存

我尝试使用FieldBuilder和上面提到的示例Boris的方法,但我无法从弹出对话框进入字段

关于如何修改项目的xml的任何建议也可以是来自模式弹出窗口的页面

编辑:getControlForFieldName中使用的代码

函数GetControlForFieldName{ var fieldBuilder=$display.getView.properties.controls.fieldBuilder; var fieldscocontainer=fieldBuilder.properties.input; var fieldsNode=fieldsContainer.getElement; var fieldContainer=$dom.getFirstElementChildfieldsNode; whilefieldcontainer{ var labelNode=$dom.getFirstElementChildfieldContainer; var fieldNode=$dom.getNextElementSiblinglabelNode; var控制=fieldNode.control; 如果control.getFieldName==name{ 返回控制; } fieldContainer=$dom.getNextElementSiblingfieldContainer; } } 编辑2

在Frank的建议和Jaime&Frank离线的帮助下,我让它按如下方式工作:

在我的例子中,弹出窗口是从命令扩展名Save&Close调用的 js指定一个事件处理程序,在按下submit==OK时调用该处理程序 $evt.addEventHandlerp.dialogPopup,提交, this.getDelegatethis.\u onpopusubmit; 在弹出窗口中,我将所选项目作为关键字ID传递给事件处理程序:

this.fireventsubmit,{id:select.options[select.selectedIndex].value}; 现在回到事件处理程序OnPopusSubmite中,我只是读取e.data.id,加载这个关键字,获取id和Title等属性,并使用item.setMetadatanew metadata使用更新的值更新项的元数据


简单:

您的代码在弹出窗口中运行,因此您对全局变量的任何引用都将从弹出窗口中获取

因此,当您获得fieldBuilder时:

var fieldBuilder=$display.getView.properties.controls.fieldBuilder; $display是对全局变量的引用。因此,这实际上是在弹出窗口中查找FieldBuilder,而弹出窗口中没有FieldBuilder

要获取组件窗口的FieldBuilder,可以从opener获取:

var fieldBuilder=opener.$display.getView.properties.controls.fieldBuilder;

您可能想考虑将更新的值实际传递给回调函数或自定义事件,因为这会使弹出窗口更少依赖于打开器。诀窍。

您能分享弹出窗口中的代码吗?很可能你失去了父母。某处。谢谢Frank,你的答案是我需要的一半:经过简短的讨论-并基于你的见解-我将结果传递回我的提交事件处理程序,我将很快发布正确的答案,尝试现在总结代码