0

我正在尝试在输入文本字段中使用预输入功能。我不想使用固定列表或 DBColumn 填充值(这会降低数千个条目的速度),而是使用预先输入属性的 url 参数。

到目前为止,我所做的是:

<xp:inputText value="#{docEntry.namUsers}" id="namUsers">
    <xp:typeAhead mode="external" valueMarkup="false" minChars="3" var="namEntries" frequency="1" maxValues="10" id="typeAheadNamUsers">
        <xp:this.url><![CDATA[#{javascript:"http://server/databse.nsf/view?ReadViewEntries&OutputFormat=JSON&StartKey=" + getComponent("namUsers").getAttributes().get("value");}]]></xp:this.url>
    </xp:typeAhead>
</xp:inputText>

当输入最少需要的字符时,我可以看到一个 GET 请求被触发。这个 GET 请求返回视图的所需内容。

但是我没有找到任何方法来获取返回的信息以解析内容并为 typeahead 元素提供有效列表。

有没有人尝试过使用 typeahead 元素的 url 属性?

4

2 回答 2

1

您不能以这种方式使用预先输入的url参数。该参数只是用于初始化预输入小部件的配置参数,不会随您的服务器端代码更新。

如果您查看 firebug 控制台,您会看到一个名为$$value的 URL 参数会自动添加到您定义的 url(包含查找本身的字符)。

Typeahead 的响应需要是简单的 HTML 代码:

<ul>
   <li>Result 1</li>
   <li>Result 2</li>
   <li>Result 3</li>
   <li>...</li>
</ul>

[它可以更改以用于显示目的,但它必须是 HTML]

外部请求没有 JSON / XML。

您可以为您的视图创建一个$$ViewTemplate(HTML 内容)以返回所需的格式,并添加一个重定向代理:

Option Public
Option Declare

Sub Initialize
    Dim session As New NotesSession
    Dim doc As NotesDocument
    Dim hlp

    Set doc = session.Documentcontext
    hlp = Split( doc.QUERY_STRING_DECODED(0), "$$value=" )
    Print "[http://example.com/YourDB.nsf/View?OpenView&startKey=" & hlp(1) & "]"

End Sub

然后您可以将 url 设置为您的代理而不是视图:

<xp:typeAhead mode="external" valueMarkup="false" minChars="3"
   frequency="1" maxValues="10" id="typeAheadNamUsers"
   url="http://example.com/YourDB.nsf/RedirectAgent?OpenAgent">
</xp:typeAhead>
于 2013-02-19T14:47:51.583 回答
0

AFAIK 该 URL 预期的数据需要“准备好收集”,这意味着由分隔符(逗号或换行符)分隔的值列表。?ReadViewEntries 不提供该格式,因此您想改用 HTML passthru 视图。我会挑战你的假设。如果您用于查找的数据库位于同一台服务器上,那么是什么让您认为添加 HTTP 延迟会比 @DbColumn 更快?如果它是不同的服务器,那将是一个有趣的测试——此外,无论如何将值查找保持在同一台服务器上会更好。另一个问题:在预先输入的列表中包含数千个潜在值的用户体验真的是高效、有效和愉快的吗?

于 2013-02-12T12:25:34.450 回答