我有一个XPage,带有扩展库中的Dialog控件。
对话框工作正常 - 打开,执行它需要做的事情,但是,当我尝试更新“父”文档时,它不起作用。
我将XPage数据源称为Domino文档,名为document1。我在阅读后添加了这个: When I save a document from an extension library dialog box some values are blank
<xp:this.data>
<xp:dominoDocument var="document1" formName="speakerReq"></xp:dominoDocument
</xp:this.data>
在对话框控件上,我有一个Search按钮,它调用一个servlet并返回被解析并构建到HTML表中的JSON。第一个单元格是一个链接,它在单击时从客户端JavaScript库调用函数。该函数是使用返回的JSON中的值更新“父”文档,并关闭对话框。
当我在该函数中只使用alert()语句进行测试时,它可以调用该函数,但是,当我尝试更新“父”文档时,它无法识别。
我试图传递“document1”对象但是一旦我进入对话框,就说它不存在,所以链接失败了。
以下是构建链接的代码段:
// Let's build the row...
cell = document.createElement("td");
resultLink = document.createElement("a");
resultLink.setAttribute("class", "linkText");
resultLink.setAttribute("href", "#");
resultLink.setAttribute("onclick", "javascript:updateDocument(document1, '" + bpName + "', '" + bpEmail + "', '" + bpPhone + "', '" + bpTitle + "', '" + bpCountry + "', '" + bpLoc + "');");
resultLink.appendChild(document.createTextNode(bpName));
cell.appendChild(resultLink);
row.appendChild(cell);
如何在客户端获取document1对象的句柄,以便我可以在“父”文档上更新这些字段并关闭对话框?
代码:
function updateDocument(doc, name, email, phone, job, country, location) {
var thisField;
// Need to update the document with the selected values...
thisField = doc.getElementById("#{id:sr_Name1}");
thisField.value = name;
thisField = doc.getElementById("#{id:sr_Title1}");
thisField.value = email;
thisField = doc.getElementById("#{id:sr_Phone1}");
thisField.value = phone;
thisField = doc.getElementById("#{id:sr_Email1}");
thisField.value = job;
thisField = doc.getElementById("#{id:sr_Location1}");
thisField.value = location + " - " + country;
}
谢谢!
答案 0 :(得分:1)
似乎你正在混合使用CSJS和SSJS。代码段在浏览器中运行,但您尝试执行服务器端代码。这不行。您需要将数据回发到服务器并在那里处理数据。 XPages Wiki有some ideas你可能会觉得有用。
<强>澄清强>:
经验法则:浏览器中存在JavaScript的任何内容都不能包含SSJS。所以你可以使用任何DOM,但没有会话,数据库,document1等SSJS库对CSJS是不可见的,所以你不能调用这些方法。您可以在页面中有一个按钮,用于定义CSJS和SSJS。客户端将先执行然后再刷新(部分或全部)。
您的上述代码:getElementById
是CSJS - &gt;不能在SSJS中使用它,而doc是NotesDocumentDatasource - &gt;没有getElementById。
此外:没有“父”元素。对话框只是本地DOM的另一部分(这不是NotesUIWorkspace.dialogbox)。检查XPagesWiki中的样本