我正在尝试构建一个简单的搜索应用程序,作为 Comet 和Lift Framework的学习实验。计划是有一个带有文本输入和搜索结果空间的页面。当输入搜索词时,它应该作为 ajax 请求传输,结果应该由服务器推回并呈现在同一页面上。当服务器发现更多结果时,应该将它们推送到客户端。
使用Comet Chat Demo作为模板,我有一个 CometActor,它呈现 ajax 表单和来自以下模板的搜索结果:
<lift:comet type="SearchResults" name="Other">
<search:input><search:input /><input type="submit" value="Search" /></search:input>
<search:results>
<div>Results for: <search:tag /></div>
<div class="search-results">
<search:list>
<li><list:title /></li>
</search:list>
</div>
</search:results>
</lift:comet>
相应的 SearchResults actor 将其呈现为两部分:fixedRender
生成 ajax 表单并render
负责呈现搜索结果。
class SearchResults extends CometActor {
override lazy val fixedRender: Box[NodeSeq] = {
SHtml.ajaxForm(bind("search", findKids(defaultXml, "search", "input"),
"input" -> SHtml.text("", updateSearch _)))
}
private def updateSearch(tag: String) = Log.info("UpdateSearch: " + tag)
def render = {
bind("search", findKids(defaultXml, "search", "results"),
"tag" -> "MyTag", // TODO show actual search tag
"list" -> <ul><li>Entry</li></ul>) // TODO actual search results
}
}
原则上,这段代码可以工作,但它会将搜索框呈现在结果下方,而不是我期望的顶部。
我认为,这与执行 和 的顺序render
有关fixedRender
。如何更改此代码以使搜索框位于顶部?