我正在尝试使用代理应用程序构建我的第一个商店。我有一个 JSON 文件Employees.json 如下:
{
"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"
}
]
}
我的店铺如下:
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 is being synched. Please wait...");
}
},
afterRequest: function(store, operation, eOpts)
{
console.log("The store has been synched. ");
}
});
我的模特
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;
}
});
我的 App.js(相关部分)
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 a empty store
empStore = Ext.create('BasicApp.classes.EmployeeStore');
// loading the store from JSON file through an 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();
// For testing
console.log("After sync: ");
console.log(empStore);
clearAllFields(); // clears all form fields
Ext.get('display').update('New Model added to the Store. Total Models:' + empStore.getCount());
}
我在和调用之间做了很多console.log
测试,这就是我发现的:store.add
store.sync
商店的 add() 方法没有正确添加记录/商店中新创建的模型的所有主要属性都与我的第一条记录相同(从 JSON 文件开始加载)/基本上,第一个是在最后一条记录中重复。
但是,我进一步深入研究了我的
console.log
输出,发现新输入的数据实际上存在于模型中;相反,它在raw
选项中
我是 ExtJS 的新手,因此不能理解很多内部结构。但我猜数据是作为原始 json 而不是模型写入商店的。为什么会这样?我在这里有什么问题吗?添加后我应该做更多的事情吗?也许在模型中添加一些代码?
编辑:更新的商店。自动加载不正确。
编辑 2:我的模型是否错过了构造函数?“添加”如何构建要添加到商店的模型?