JQuery - autorefresh页面的一部分

时间:2015-12-30 23:08:32

标签: javascript jquery django

在我的Django项目中,我有一个显示特定模型的所有实例的页面。我想每隔几秒自动刷新一次页面,但只更新页面的相关部分。

我将描述每个部分。首先 - 我有一个Django视图。在最简单的形式,它看起来像这样

override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! videoCellCollectionViewCell
    let video = "https://www.youtube.com/watch?v=DGRC1DV7b78"
    cell.video = video
    return cell
}

因此它从数据库中找到所有class MyListView(ListView): lookup_field = 'uuid' model = Foo template_name = 'mylist.html' def get_queryset(self): return list(Foo.objects.all()) # finds all my objects from DB def get_context_data(self, **kwargs): objects = self.get_queryset() context = super(MyListView, self).get_context_data(**kwargs) context['foos'] = objects # this gets passed to html page return context 个对象并将其返回给html。

html页面显示一个表,其中每个条目都是一行。此外,每行的开头都有一个复选框。喜欢这个

Foo

现在,<table id="content"> <thead> <tr> <th><input type="checkbox" id="chckHead"/></th> <th>UUID</th> <th>Attribute1</th> <th>Attribute2</th> </tr> </thead> <tbody> {% for item in foos %} <tr id="{{ item.uuid }}"> <td> <input type="checkbox" name="checkboxlist" class="chcktbl" /> </td> <td><code>{{ item.uuid }}</code></td> <td>{{ item.attribute1 }}</td> <td>{{ item.attribute2 }}</td> </tr> {% endfor %} </tbody> </table> 模型的某些属性可能会在后台更新,因此我想以某种方式定期使用新数据刷新页面。

我是用javascript做的,就像这样

Foo

所以每隔5秒,JS会调用 function setup() { setTimeout("refreshPage();", 5000); } function refreshPage() { window.location = location.href; } $(document).ready(setup); ,我的页面会刷新。如果在幕后更改了数据库,我的页面就会反映出来。

以上问题是它刷新整个页面,其中包括复选框。因此,如果我已经选择了一个复选框,则刷新会将其重置为其原始状态(“未选中”)。

那么,解决这个问题的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

真的很高级别:

您要添加的window.location将重置整个页面。到这个时候你已经想出来了。您正在寻找的是可以通过使用页面部分或使用REST端点并将其推回模板来处理的事情。

以下是您需要refreshPage进行预处理的步骤。

  1. 保存您认为重要的任何值
  2. 发送ajax请求以获取partial或json
  3. 将新信息呈现给页面
  4. 将第一步中的值放回步骤3中呈现的值
  5. 如果他们当前正在编辑区域,那么你很可能会想要等待刷新页面(保存第1步和第4步)。那可能是你已经投票反对的选择。

    我希望这有帮助,这是一个非技术性的答案,但我不确定如果不了解你的项目,我会给你一个非常具体的答案。