【问题标题】:Anguilla - Updating a field's value from a popup?安圭拉 - 从弹出窗口更新字段的值?
【发布时间】:2012-06-27 19:48:49
【问题描述】:

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

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

我尝试使用 FieldBuilder 和 this other topic 中提到的示例 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 离线的一些帮助下,我得到了如下工作:

  1. 从命令扩展调用弹出窗口(在我的例子中是保存并关闭)
  2. 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值”)。

简单:)

【问题讨论】:

  • 你能分享你在弹出窗口中的代码吗?您很可能在某处遗漏了parent.。

标签: tridion


【解决方案1】:

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

所以当你得到 fieldBuilder 时:

var fieldBuilder = $display.getView().properties.controls.fieldBuilder;

$display 是对全局变量的引用。所以这实际上在弹出窗口中寻找 FieldBuilder(它没有)。

要获取Component窗口的FieldBuilder,可以从opener中获取:

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

您可能需要考虑将更新后的值实际传递给回调函数或使用(自定义)事件,因为这样可以减少弹出窗口对 opener. 技巧的依赖。

【讨论】:

  • 谢谢弗兰克,你的回答是我需要的一半:) 经过简短的讨论 - 根据你的见解 - 我将结果传回给我的“提交”事件处理程序,我将发布很快就正确答案了,现在试着总结一下代码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多