Lift CometActor:组织render和fixedRender生成的HTML

时间:2009-11-15 16:23:21

标签: scala lift

我正在尝试使用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
     }
}

原则上这个代码可以工作,但它会使结果下面的搜索框不在我期望的顶部。

我认为,这与执行renderfixedRender的oder有关。如何更改此代码以使搜索框位于顶部?

1 个答案:

答案 0 :(得分:0)

看看CssSelectors。但我想这个问题现在已经过时了;)CssSelectors也没有在09年提供。