Ho due modelli di dati: Writer.AttributValeur
e Writer.Produit
.ExtJS, store, HasMany - BelongsTo e aggiornamento processo: howto?
Writer.Produit
ha HasMany
/BelongsTo
rapporto con Writer.AttributValeur
.
Così la definizione è come questo:
Ext.define('Writer.AttributValeur', {
extend: 'Ext.data.Model',
fields: [{
name: 'id',
type: 'int',
useNull: true
},
'description',
'val'
],
belongsTo: 'Writer.Produit'
});
Ext.define('Writer.Produit', {
extend: 'Ext.data.Model',
fields: [{
name: 'id',
type: 'int',
useNull: true
},
'titre',
'description'
],
hasMany: {
model: 'Writer.AttributValeur',
name: 'attributs'
}
});
var store = Ext.create('Ext.data.Store', {
model: 'Writer.Produit',
autoLoad: true,
autoSync: true,
proxy: {
type: 'ajax',
api: {
read: 'json/liste_view/',
create: 'json/item/?mode=create',
update: 'json/item/?mode=update',
destroy: 'json/item/?mode=destroy'
},
reader: {
type: 'json',
successProperty: 'success',
root: 'data',
messageProperty: 'message'
},
writer: {
type: 'json',
writeAllFields: true,
root: 'data'
}
}
});
Ora, quando ho letto il file, chiedendo "Produits", non c'è una risposta AJAX che funziona perfettamente:
E in ogni "riga", ci sono molti Writer.AttributValeur
(li ho alias come "attributi" vedi immagine):
Il problema è quando inserisco un Writer.AttributValeur
in questo campo "attributs
", in questo modo:
form.getRecord().attributs().add(newrecord);
Funziona perfettamente, ma quando chiamo store.sync()
non succede nulla. Così ho marchio da parte il record come dirty
:
form.getRecord().attributs().add(newrecord);
form.getRecord().setDirty();
form.getRecord().store.sync();
ora è inviato, ma il attributs
non vengono inviati! Vedere:
Come farò a "aggiungere" questo nel processo di aggiornamento?
Hai fatto davvero che funzioni ? Puoi anche notare i pezzi che sono stati omessi dalla soluzione pubblicata sul thread Sencha? – dbrin
Ecco un altro approccio interessante con i moduli: http://stackoverflow.com/a/9891694/834424 – dbrin
Ci ho lavorato 20/7, quindi ho modificato la soluzione, perché l'altra soluzione non funzionava quando inserivo nuovi record. Ora (1) tutto funziona bene (2) chiama la funzione genitore (= la funzione 'getRecordData()' originale di sencha), che è più sicura, più intelligente e probabilmente rimarrà compatibile nel lungo periodo (3) è molto più breve quindi più facile capire –