繁体   English   中英

Liftweb CRUD:如何在HTML表格中获取已编辑的内容并将其重新提升?

[英]Liftweb CRUD : How to get edited content in an HTML table an return it to lift?

我有一个电梯代码,用于呈现带有可编辑内容的一些单元格的HTML表格。

为了编辑我正在使用editinplace.js

<script src="/js/jquery.editinplace.js"></script> 

我在电梯渲染表中设置了editable属性:

def renderTable(columns: List[(String,List[Model])]) = {
          {val entityCountMax = columns.maxBy(_._2.size)
           for(i <- 0 until entityCountMax._2.size) yield {
            <table style="font-size:80%; float: left; margin-left: 30px; width: auto;" class="table table-striped table-condensed table-hover">
                <tr>{ <th> { prettifyClassName(entityCountMax._2(i))} </th> % Attribute(None, "colspan", Text((columns.size+1).toString), Null)}</tr>
                {renderHeader(columns.map(_._1))}
            {for((key,value) <- entityCountMax._2(i).fields) yield {
            <tr>
            <th style="text-align: right;">{key}</th>
            {for(j <- 0 until columns.size) yield {
              <td>{try{
                            printField(columns(j)._2(i).fields.get(key))
                  }catch { case e:Exception => ""}
             }</td> % Attribute(None, "class", Text({ if(columns(j)._1 contains "DB") "editable" else "" }), Null)
            }}
            </tr>
        }}
        </table> 
         }} ++
          <script><![CDATA[ 
            $(document).ready(function(){
            $('.editable').editInPlace({ callback: function(unused, enteredText){ 
            $(this).css('color','red'); return enteredText;},
            default_text: ''
            })});]]>
          </script>
        } 

不要过多地考虑上面的渲染功能,它工作正常,我可以毫无问题地编辑想要的单元格。 编辑的细胞用红色着色。

我现在要做的是获取已编辑单元格的内容并将其返回到我的scala应用程序,但我不知道该怎么做。

我想要做的是为我的模型建造一个DIY升降机CRUD。 问题是这种方式(我猜)我必须制作一个html页面来逐个编辑每个单元格,但我不太喜欢这个解决方案。

所以这是真正的问题:

是否可以使用scala中的数据结构直接映射html表? 如果是,我该怎么办?

如果您只是想直接将变量映射到服务器,并自动发送更改 - Lift提供了一种连接机制 ,它会在更新发回服务器时发送更新,并更新任何相关数据。 您仍然需要处理该事件以保留任何更改。 另外,我不确定它对你创建的机制有多好。

我知道你正在使用一个外部库,但开箱即用的Lift提供SHtml.swappable它可以为您提供了一个可编辑状态和非编辑状态之间切换的机制。 当与ajaxText框结合使用时,将为您提供一种编辑数据的方法,即:

var name="myname"
SHtml.swappable(
  <span>{name}</span>, 
  SHtml.ajaxText(name, (v) => name = v)
)

如果您只是生成NodeSeq并希望将其返回到Lift处理的浏览器,您可以查看LiftSession.processSurroundAndInclude

如果您使用CSS选择器和响应处理,我发现Lift的功能最有效。 但是,如果您使用Javascript创建表单,并且您的库负责管理数据,那么最好使用Rest类型服务将数据恢复到您的应用程序中。 RestHelper使这很容易。 我经常和AngularJS一起使用它来做类似的应用程序,就像你想要的那样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM