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