我正在研究django项目,并且我已成功将其与jQuery数据表显示集成(这是一个通用示例,我的代码稍微长一点,而且更具体,但这是重要的部分):
模板:
<script type="text/javascript">
$(document).ready(function() {
$('#example').dataTable( {
"bProcessing": true,
"bServerSide": true,
"sAjaxSource": "/employee_table/"
} );
} );
</script>
<table id='example'>
<thead>
<th>name</th>
<th>state</th>
<th>email</th>
<th>registration date</th>
<th>projects</th>
</thead>
<tbody>
<td colspan="5" class="dataTables_empty">Loading data from server</td>
</tbody>
</table>
服务器端:
def main_view(request):
return render_to_response('index.html')
def datatables_view(request):
start = request.GET['iDisplayStart']
length = request.GET['iDisplayLength']
query = Employee.objects.all()
if request.GET.has_key('sSearch'):
# filtering...
query = query[start:start+length]
response = ["aaData": [(q.name, q.state, q.email_disp(), q.regdate_disp(), q.projects_disp()) for q in query]]
# return serialized data
这没有任何障碍。现在我想允许我的用户就地编辑数据。 jEditable插件有效,但它有一些问题:
email_disp是一个根据内容为电子邮件着色的功能(例如,它会在字段周围添加html标记,因此如果它是gmail,则文本颜色为绿色)。当我想用jEditable编辑它时,它也会向我显示标签,这不是很好。
regdate_disp是一种只以特定方式输出注册日期和时间的功能。然而,当人们编辑这个td时,我希望他们看到两个不同的输入 - 一个用于日期(这将是一个jQuery日期选择器)和一个用于时间(只是一个规则文本字段)。
每个员工都有几个项目(它是一个ManyToMany关系),而projects_disp函数的作用类似于:return','。join(Employee.projects.all())。但是,在编辑此字段时,我认为最佳显示是下拉清单。
正如您所看到的,jEditable的简单功能对我没有帮助。我想解决这个问题的理想方法是在表格的每一行旁边放一个按钮,单击该按钮时,将向服务器发送此行,并返回一个定制输入的数组(如aaData)来替换每个td。该按钮将更改为保存图标,再次单击时将重新收集数据。
然而,我对javascript并不是很好,我不知道如何做到这一点。任何帮助或完整的示例都将非常感激(包括如何将解决方案与数据表集成而不会破坏任何内容)。