我正在尝试在inputtext-field中使用预先输入功能。 我想使用typeahead属性的url参数,而不是通过使用固定列表或DBColumn来填充值(这是减慢数千个条目的速度)。
到目前为止,我所做的是:
<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属性?
答案 0 :(得分:1)
您不能以这种方式使用typeahead的 url 参数。该参数只是初始化typeahead小部件的配置参数,不会使用服务器端代码进行更新。
如果您查看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内容)以返回所需的格式,并且f.e。添加重定向代理:
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
然后,您可以将网址设置为代理,而不是视图:
<xp:typeAhead mode="external" valueMarkup="false" minChars="3"
frequency="1" maxValues="10" id="typeAheadNamUsers"
url="http://example.com/YourDB.nsf/RedirectAgent?OpenAgent">
</xp:typeAhead>
答案 1 :(得分:0)
AFAIK从该URL预期的数据需要“收集就绪”,这意味着由分隔符(逗号或换行符)分隔的值列表。 ?ReadViewEntries不提供该格式,因此您希望使用HTML passthru视图。 我会挑战你的假设。如果您的查找数据库位于同一台服务器上,那么是什么让您认为添加HTTP延迟会比@DbColumn更快?如果它是一个不同的服务器,那将是一个有趣的测试 - 除此之外无论如何将值查找保持在同一服务器上会更好。 另一个问题是:用户体验在一个先行列表中有数千个潜在价值,真正有效,有效和愉快吗?