[英]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.