Javascript 如何更改Alfresco ftl(freemarker)控件的基本字段?
我试图将一个非常简单的ftl定义为工作流表单字段的控件 这是ftl使用的代码:Javascript 如何更改Alfresco ftl(freemarker)控件的基本字段?,javascript,workflow,alfresco,freemarker,Javascript,Workflow,Alfresco,Freemarker,我试图将一个非常简单的ftl定义为工作流表单字段的控件 这是ftl使用的代码: <field id="myTes:myList" set="noderefs" mandatory="true" > <control template="/org/alfresco/components/form/controls/myFTLExample.ftl" /> </field> 这是ftl代码: <#assign controlId = f
<field id="myTes:myList" set="noderefs" mandatory="true" >
<control template="/org/alfresco/components/form/controls/myFTLExample.ftl" />
</field>
这是ftl代码:
<#assign controlId = fieldHtmlId + "-cntrl">
<b>test</b>
<script type="text/javascript">//<![CDATA[
alert("${fieldHtmlId}"); //I can see the generated name of the field
alert(document.getElementById("${fieldHtmlId}")); //returns null
alert(YAHOO.util.Dom.get("${fieldHtmlId}")); //returns null
}
//]]></script>
测试
//
问题是:
我可以在我的工作流表单上看到生成的html。脚本也会执行,我得到第一个警报。我可以将字段的名称视为一个大字符串(其中该字符串的parte是基本字段的名称:myList)
但是,第二个和第三个警报始终返回null。因此,我无法获取基本字段以更改/更新其值
我遗漏了什么?请注意,这个问题与工作流表单的异步性质无关,因为,即使我在用户单击按钮时运行脚本(在这种情况下,DOM已全部设置……是的,我等待它几分钟),我也会得到空值。答案如下:
<#assign controlId = fieldHtmlId + "-cntrl">
<b>test</b>
<input id="${fieldHtmlId}" type="hidden" name="${field.name}" value="" />
<script type="text/javascript">//<![CDATA[
alert("${fieldHtmlId}"); //I can see the generated name of the field
alert(document.getElementById("${fieldHtmlId}")); //returns null
alert(YAHOO.util.Dom.get("${fieldHtmlId}")); //returns null
}
//]]></script>
测试
//
我们必须始终有一个输入字段来保存
myTes:myList
字段的值。此外,为了设置此字段的值,我们必须像示例中那样设置name属性。您确定在dom中生成的id与${fieldHtmlId}相同吗?是的,但我已经解决了问题。好的,你能把解决方案作为你问题的答案发布出来,这样每个人都能从中受益吗?当然!当在Alfresco中,一个ftl组件与一个字段相关联时,我想Alfresco会管理基本字段的生命周期。但那不是真的。我们需要在t中创建一个字段作为输入字段他控制。这就是为什么我没有得到字段…因为它没有被创建。在那之后,我仍然无法将表中选定的数据设置为我的基本(工作流)字段,因为我只是像这样设置字段的id:id=“${fieldHtmlId}”。但是,我们还必须像这样设置输入字段的名称:name=“${field.name}”当做