2010-05-27 4 views
1

J'ai un JsonStore configuré comme ceci:Comment puis-je obtenir un JSONStore ExtJS pour placer les données JSON directement dans le corps de la requête?

var store = new Ext.data.JsonStore({ 
    restful: true, 
    url: '/categories', 
    remoteSort: true, 
    idProperty: 'Id', 
    totalProperty: 'total', 
    root: 'results', 
    writer: new Ext.data.JsonWriter({ 
     encode: false 
    }), 

    fields: [ 'Id', 'Name' ] 
}); 

Je prends des données à partir du serveur, puis modifiez l'un des enregistrements. Quand je dis le magasin pour sauver, il envoie ce JSON au serveur:

{ 
    "results": 
    { 
     "Name":"Trivial123", 
     "Id":2 
    } 
} 

Le magasin est enveloppant le JSON intérieur de la propriété results (la propriété racine configurée sur le magasin). Toutefois, le serveur attend à ce que:

{ 
    "Name":"Trivial123", 
    "Id":2 
} 

En d'autres termes, l'entité sérialisé doit être mis directement dans le corps de la réponse, et non enveloppé dans une propriété. Est-ce que quelqu'un sait comment je peux configurer le magasin pour le faire?

Répondre

3

Vous devez remplacer la fonction de rendu des données dans le JsonWriter, comme ceci:

var rootlessRenderFunction = function (params, baseParams, data) { 
    if (this.encode === true) { 
     Ext.apply(params, baseParams); 
     params = Ext.encode(data); 
    } else { 
     params.jsonData = data; 
    } 
}; 

var myWriter = new Ext.data.JsonWriter({ 
    encode: false, 
    writeAllFields: true 
}); 
myWriter.render = rootlessRenderFunction; 

var myStore = new Ext.data.JsonStore({ 
    // ... various config values ... 
    writer: myWriter 
}); 

Cette mise en œuvre de « rootlessRenderFunction » est le même que le code rendu de la Poste JsonWriter sauf qu'il ne s'interposer pas de racine dans la demande des données.

Ceci est un hack, bien sûr.

0

Je suppose que vous ne pouvez pas simplement ne pas définir la valeur racine pour le magasin pour une raison quelconque? C'est comme ça que je le fais normalement.

+0

Le JSON obtenu du serveur contient les données réelles placées dans la propriété 'results'. Vous venez juste de me dire que je vais essayer. –

+0

Quelle était l'idée? – Gary

Questions connexes