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>
。マークアップでスニペットを汚染して、デザイナーがテーブルでやりたいことをする余地を残すことは避けたいと思います。このスニペットをどのように完成させますか?