2015-07-30 1 views
0

J'utilise w2ui pour afficher une table d'un modèle django. Au lieu de charger tous les éléments en même temps, j'utilise autoLoading pour charger 100 éléments à la fois. Voici le code de la table:La table ne se charge pas automatiquement lors du défilement

var config = { 
    grid: { 
     name: "grid", 
     url: "retrieveData/", 
     show: { 
      footer:true, 
      toolbar:true 
     }, 
     header: "List of RTNs", 
     columns: [ 
      { field:"number", caption:"Number", size:"30%" }, 
      { field:"name", caption:"Name", size:"30%" }, 
      { field:"release", caption:"Release", size:"30%" } 
     ] 
    } 
} 
$(function() { 
    $("#grid").w2grid(config.grid); 
}); 

Le code qui gère la demande JSON se fait via une vue django, voici le code correspondant:

@csrf_exempt 
def retrieveData(request): 
    cmd = request.POST.get("cmd", False) 
    if cmd == "get-records": 
    offset = int(request.POST.get("offset", False)) 
    limit = int(request.POST.get("limit", False)) 
    entries = Data.objects.all()[offset:limit+offset] 
    json_list = {"status":"success"} 
    records = [] 
    def notNone(x): 
     if x != None and x != "": 
     return x.strftime("%Y-%m-%dT%H:%M:%S") 
     else: 
     return "" 
    for entry in entries: 
     records.append({ 
     "recid":entry.id, 
     "number":entry.number, 
     "name":entry.name, 
     "release":entry.release,}) 
    total = len(records) 
    json_list["total"] = total 
    json_list["records"] = records 
    return HttpResponse(json.dumps(json_list), content_type="application/json") 

    else: 
    json_list = {"status":"error"} 
    json_list["message"] = "CMD: {0} is not recognized".format(cmd) 
    json_list["postData"] = request.GET 
    return HttpResponse(json_dumps(json_list), content_type="application/json") 

Le tableau est en mesure de récupérer les 100 premiers éléments, mais quand je défile tout en bas, la table ne charge pas plus d'éléments. Au lieu de charger plus d'éléments, il ne fait rien. J'ai désactivé autoLoad, mais cela n'a rien fait (le bouton "Load More" n'apparaissait pas). Il y a mille éléments dans ma table.

Aucune erreur n'est signalée, et tout semble fonctionner, sauf qu'il ne charge pas plus d'éléments lorsque je défile.

Je suivais l'exemple ci-dessous à partir du site w2ui: http://w2ui.com/web/demos/#!combo/combo-9

Répondre

0

Le total moyen est fixé à la ligne

json_list["total"] = total 

est faux. Parce que c'est dire que la quantité totale d'éléments est de 100, même si vous avez plus de 100 éléments. "total" est utilisé pour indiquer le nombre total d'éléments dont vous n'avez pas le nombre total d'éléments que vous envoyez dans la réponse json.

Change the code to the following: 

    @csrf_exempt 
    def retrieveData(request): 
     cmd = request.POST.get("cmd", False) 
     if cmd == "get-records": 
     offset = int(request.POST.get("offset", False)) 
     limit = int(request.POST.get("limit", False)) 
-->  entries = Data.objects.all() 
-->  total = len(entries) 
-->  entries = entries[offset:limit+offset] 
     json_list = {"status":"success"} 
     records = [] 
     def notNone(x): 
      if x != None and x != "": 
     return x.strftime("%Y-%m-%dT%H:%M:%S") 
     else: 
     return "" 
    for entry in entries: 
     records.append({ 
     "recid":entry.id, 
     "number":entry.number, 
     "name":entry.name, 
     "release":entry.release,}) 
    json_list["total"] = total 
    json_list["records"] = records 
    return HttpResponse(json.dumps(json_list), content_type="application/json") 

    else: 
    json_list = {"status":"error"} 
    json_list["message"] = "CMD: {0} is not recognized".format(cmd) 
    json_list["postData"] = request.GET 
    return HttpResponse(json_dumps(json_list), content_type="application/json")