0

我有一个带有扩展库中的对话框控件的 XPage。

对话框工作正常——打开,做它需要做的事情,但是,当我尝试更新“父”文档时,它不起作用。

我将 XPage 数据源作为名为 document1 的 Domino 文档。我在阅读后添加了这个: 当我从扩展库对话框中保存文档时,一些值是空白的

<xp:this.data>
<xp:dominoDocument var="document1" formName="speakerReq"></xp:dominoDocument
</xp:this.data>

在对话框控件上,我有一个搜索按钮,它调用一个 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;

} 

谢谢!

4

1 回答 1

1

似乎您正在混合 CSJS 和 SSJS。代码片段在浏览器中运行,但您尝试执行服务器端代码。这是行不通的。您需要将数据回发到服务器并在那里处理数据。XPages Wiki 有一些您可能会觉得有用的想法。

澄清

经验法则:在浏览器中以 JavaScript 形式出现的任何内容都不能包含 SSJS。所以你可以使用任何 DOM,但不能使用 session、database、document1 等。SSJS 库对 CSJS 是不可见的,所以你不能调用这些方法。您可以在页面中有一个按钮,您可以在其中定义 CSJS 和 SSJS。客户端将首先执行,然后进行刷新(部分或全部)。

上面的代码也是:getElementById是 CSJS -> 不能在 SSJS 中使用它,而 doc 是 NotesDocumentDatasource -> 没有 getElementById。

此外:没有“父”元素。对话框只是本地 DOM 的另一部分(这不是 NotesUIWorkspace.dialogbox)。检查 XPagesWiki 以获取示例

于 2012-10-10T18:33:07.383 回答