2011-05-29 2 views
0

Je veux afficher un combo extjs avec un JsonStore Côté serveur J'utilise python/Django.Django et Extjs, comment utiliser combo avec jsonstore

Alors, voici mon combo:

xtype: 'combo', 
store: new Ext.data.JsonStore({ 
    url: 'get_peoples', 
    root: 'data', 
    totalProperty: 'total', 
    fields: [ 
     {name: 'name', mapping: 'fields.name'}, 
     {name: 'subname', mapping: 'fields.subname'} 
    ], 
    autoLoad: true 
}), 
trigerAction: 'all' 

et côté serveur views.py:

def get_peoples(request): 
    queryset = People.objects.all()  
    data = '{"total": %s, "%s": %s}' % \ 
     (queryset.count(), 'data', serializers.serialize('json', queryset)) 
    return HttpResponse(data, mimetype='application/json') 

l'appel get_people me donne

{"total": 1, "data": [{"pk": 1, "model": "myapp.people", "fields": {"name": "Paul", "subname": "Di Anno"}} 

Je pense que je suis ne pas le faire correctement, parce que mon combo n'affiche aucun élément

Répondre

2

Vous devez ajouter des déclarations displayField et valueField à votre zone de liste déroulante afin qu'elle sache quels champs de votre magasin utiliser pour l'un ou l'autre rôle. En outre, la définition de autoLoad dans le magasin n'est pas nécessaire.

new Ext.form.ComboBox({ 
    xtype: 'combo', 
    store: new Ext.data.JsonStore({ 
     url: 'get_peoples', 
     root: 'data', 
     totalProperty: 'total', 
     fields: [ 
      {name: 'name', mapping: 'fields.name'}, 
      {name: 'subname', mapping: 'fields.subname'} 
     ] 
    }), 
    triggerAction: 'all', 

    // Just guessing at the proper fields here. 
    // Set them to whatever you wish. 
    displayField: 'name', 
    valueField: 'subname' 
});