我正在尝试使用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
的oder有关。如何更改此代码以使搜索框位于顶部?
答案 0 :(得分:0)
看看CssSelectors。但我想这个问题现在已经过时了;)CssSelectors也没有在09年提供。