什么是在 Lift 中实现简单 CRUD 接口并实现它的干净方法
- 设计师友好
- 阿贾克斯
假设我们有一个视图
<table data-lift="CrudList">
<tr>
<td role="data">Item goes here</td>
<td><button role="remove" type="button">remove</button></td>
</tr>
<tr class="clearable">
<td>Item two here</td>
<td><button type="button">remove</button></td>
</tr>
<tr class="clearable">
<td>Item three!</td>
<td><button type="button">remove</button></td>
</tr>
</table>
<form data-lift="form.ajax">
<div data-lift="CrudList.create">
<input type="text" name="text"></input>
<button type="submit"></button>
</div>
</form>
还有一个片段
object CrudList {
def render = {
def remove(item: String) = () => {
ListDAO.remove(item)
JE.JsRaw("""Some JavaScript to remove <tr> from the UI""")
}
ClearClearable &
"tr *" #> ListDAO.all.map(item => {
"role=data" #> item &
"role=remove" #> ajaxInvoke(remove(item))
})
}
def create = {
var text = ""
def process(): JsCmd = {
val item = ListDAO.create(text)
JsCmds.Noop // TODO: replace this with some JsCmd
// that will create and populate new table row in the UI
// without polluting the snippet with markup
}
"@text" #> SHtml.text(text, s => text = s) &
"button *+" #> SHtml.hidden(process)
}
}
示例可能有错误,纯粹用于演示。
该render
片段很简单——我们修改现有标记并将我们的列表呈现为表格行。
我有点犹豫要不要完成这个create
片段。保留列表项的代码很简单,但我不知道如何处理<table>
使用 new更新的部分<tr>
。我想避免用标记污染片段,为设计师留下空间来处理他们想要的表格。你将如何完成这个片段?