簡體   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