EXTJS + mise à Jour d'un magasin avec l'ID de base de données après la sauvegarde d'une grille
Je suis en train d'apprendre à utiliser le EXTJS grilles pour quelques simples opérations CRUD sur une table dans un admin app.
J'ai une simple grille qui permet à quelqu'un de modifier des utilisateurs, le magasin est défini comme:
var userDataStore = new Ext.data.Store({
id: 'userDataStore',
autoSave: false,
batch: true,
proxy: new Ext.data.HttpProxy({
api: {
read: '/Admin/Users/All',
create: '/Admin/Users/Save',
update: '/Admin/Users/Save'
}
}),
reader: new Ext.data.JsonReader(
{
root: 'Data',
idProperty: 'ID',
totalProperty: 'total',
successProperty: 'success',
messageProperty: 'message'
}, [
{ name: 'ID', type: 'string', allowBlanks: false },
{ name: 'NT_ID', type: 'string', allowBlank: false },
{ name: 'EMail', type: 'string', allowBlank: false },
{ name: 'Name', type: 'string', allowBlank: false },
{ name: 'Enabled', type: 'bool', allowBlank: false },
{ name: 'CurrentRoleCode', type: 'string', allowBlank: false}]
),
writer: new Ext.data.JsonWriter(
{
encode: false,
writeAllFields: true,
listful: true
})
});
Cela est lié à une grille, et je suis capable de charger et d'enregistrer des utilisateurs sans problème. Le bouton enregistrer ressemble à ceci:
var saveButton = new Ext.Button({
text: 'Save',
disabled: true,
handler: function() {
userDataStore.save();
pageState.ClearDirty();
saveButton.disable();
}
});
Cependant, lors de la création d'un nouvel utilisateur, le JSON POSTE de l'utilisateur est publié dans le même service REST point de fin en tant que "mise à Jour", avec la seule différence étant qu'aucune valeur de l'ID est affiché (car on est seulement ensemble dans le magasin lors du chargement à partir du serveur).
Cela fonctionne, et je suis capable de créer des utilisateurs.
Le sauver service REST émet retour à la création de la ligne avec le nouvel ID de base de données, et j'ai été sous l'hypothèse que EXTJS serait automatiquement liez la nouvelle base de données générées à l'ID de la ligne. Cela permet à l'utilisateur de continuer à modifier cette ligne, et entraîner une mise à jour au lieu d'un insert.
Au lieu de cela, la ligne continue à avoir un vide de l'ID d'utilisateur, de sorte qu'un jet supplémentaire crée un autre utilisateur.
Donc, soit:
- EXTJS est censé résoudre généré ID de ligne est automatiquement et je suis tout à fait quelque chose de mal.
- Je suis censé recharger manuellement la grille après chaque enregistrement avec un REPOS supplémentaire d'appel.
J'ai été à la recherche à EXTJS la documentation et les forums, mais je suis dans le flou sur la bonne approche.
Quelqu'un peut-il préciser?
EDIT: j'ai essayé de retourner avec Succès = True en JSON pour correspondre à la SuccessProperty, cependant cela ne semble pas fonctionner.
EDIT #2: jusqu'à présent, la seule chose que j'ai trouvé qui fonctionne est en train de faire "userDataStore.reload()" après l'enregistrement, mais parce que j'étais de retour le contenu de la boutique en arrière après l'enregistrement, j'espérais que EXTJS de mieux en saisir et mettre à jour les valeurs de ligne.
OriginalL'auteur FlySwat | 2010-09-14
Vous devez vous connecter pour publier un commentaire.
OriginalL'auteur Zango
Oui, il définit l'id (et dans d'autres domaines, si le serveur renvoie les valeurs modifiées), si créer ajax backend enregistrement des retours avec id d'ensemble, au moins dans extjs 4.1. Vous devez retourner enregistrement inséré, avec identifiant, en vertu de la "racine" clé en json dictionnaire, dans cet exemple de la racine de la "Data", c'est à dire:
OriginalL'auteur kolen
Vous avez besoin de recharger magasin avec de nouveaux paramètres dans le gestionnaire savebtn
comme
magasin.reload();
bien sûr, vous pouvez ajouter plus de paramètres à charger action
OriginalL'auteur Vaidas Zilionis