extjs4.2 - extjs 4.2 - add() method in Store adding new model as RAW and NOT as a MODEL - error or bug? -
i trying build first store proxy app. have json file employees.json follows:
{ "employees": [ { "eid":608534, "ename":"navin israni", "eibu":"enr", "eprojcode":"jee_pun2", "doj":"12-07-2012" }, { "eid":608535, "ename":"rohit iyengar", "eibu":"mobl", "eprojcode":"mobl_hyd", "doj":"08-08-2012" }, { "eid":608536, "ename":"akshata joshi", "eibu":"ecs", "eprojcode":"ecs_mng", "doj":"20-09-2012" } ] }
my store follows:
ext.define("basicapp.classes.employeestore",{ extend: 'ext.data.store', model:'basicapp.classes.employeemodel', proxy: { type:'ajax', // url:'employees.json', reader: { type:'json', root:'employees' }, writer: { type:'json', root:'employees' } }, listeners: { load: function(store,records,options) { console.log("the store has been loaded:"); console.log(records); }, beforesync: function(options, eopts) { console.log("the store being synched. please wait..."); } }, afterrequest: function(store, operation, eopts) { console.log("the store has been synched. "); } });
my model
ext.define("basicapp.classes.employeemodel",{ extend: 'ext.data.model', fields: [ {name:'eid', type: 'int', defaultvalue: 9999}, {name:'ename', type: 'string'}, {name:'eibu', type: 'string', defaultvalue: 'n/a'}, {name:'eprojcode', type: 'string', defaultvalue: 'n/a'}, {name:'doj', type: 'date'} ], printdetails: function() { var str="emp id: " + this.get('eid'); str+= "<br/> emp name: " + this.get('ename'); str+= "<br/> emp ibu: " + this.get('eibu'); str+= "<br /> emp project code: " +this.get('eprojcode'); str+= "<br /> date of joining: " +this.get('doj'); return str; } });
my app.js (concerned part)
ext.application( { name:"basicapp", appfolder:"modelstoreproxy" } ); ext.onready(function(){ ext.get('newbtn').on('click',newemployee); ext.get('savebtn').on('click',saveemployee); ext.get('showallbtn').on('click',showall); // creating empty store empstore = ext.create('basicapp.classes.employeestore'); // loading store json file through ajaxproxy empstore.proxy.url='employees.json'; empstore.load(function(){ showall(); }); }); function showall() { console.log('showall: store size: '+empstore.getcount()); ext.get('display').dom.innerhtml = ""; empstore.each(function(item){ console.log(item); ext.get('display').dom.innerhtml += item.printdetails() + "<br/>-----<br/>"; }); }; var empstore; function saveemployee(e,t,eops) { alert("empid:"+ext.get('empid').dom.value); alert("empname:"+ext.get('empname').dom.value); alert("empibu:"+ext.get('empibu').dom.value); alert("emppc:"+ext.get('emppc').dom.value); alert("empdoj:"+ext.get('empdoj').dom.value); var newlyaddedrecord = { eid: parseint(ext.get('empid').dom.value), ename:ext.get('empname').dom.value, eibu:ext.get('empibu').dom.value, eprojcode:ext.get('emppc').dom.value, doj:new date(ext.get('empdoj').dom.value) }; empstore.add(newlyaddedrecord); // more testing done here empstore.sync(); // testing console.log("after sync: "); console.log(empstore); clearallfields(); // clears form fields ext.get('display').update('new model added store. total models:' + empstore.getcount()); }
i did lot of console.log
testing between store.add
, store.sync
calls , found:
add() method store not adding record / main properties of newly created model in store same first record (which loaded in beginning json file) / basically, first getting duplicated in last record.
however, further dug
console.log
output , found out newly entered data in fact present in model; instead there inraw
option
i new extjs , therefore can't understand internals. i'm guessing data being written store raw json , not model. why so? getting wrong here? supposed more after adding? maybe add code in model?
edit: updated store. autoload not true.
edit 2: model miss constructor? how 'add' construct model added store?
you can use store.loadrawdata(). use configured proxy, mapping settings, etc in model / store.
extracted documentation:
loadrawdata( data, [append] ) : boolean
loads data via bound proxy's reader
use method if attempting load data , want utilize configured data reader.