【发布时间】:2013-08-31 18:04:52
【问题描述】:
在 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>
还有一个sn-p
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 sn-p 很简单 - 我们修改现有标记并将我们的列表呈现为表格行。
我有点犹豫要不要完成create sn-p。保留列表项的代码很简单,但我不知道如何处理用新的<tr> 更新<table> 的部分。我想避免用标记污染 sn-p 为设计师留下空间来处理他们想要的表格。你会如何完成这个 sn-p?
【问题讨论】: