这里我的网格名称是“rightpanel”。我正在尝试添加在记录的每个单元格中输入的值,并在记录的最后一个单元格/列中显示总数。但是我在计算登录的总工作量时遇到了问题,如下所示。他们还有其他方法可以实现这一目标吗?
在这里,我在我的单元格中插入时间(例如 --> 2.03)。感谢和问候
var selectionModel = new Ext.selection.CheckboxModel();
var fm=Ext.form;
var currentRecord;
var oldValue;//used to store old effort while re-editing the already entered cell
Ext.define('AM.view.rightpanel' ,{
extend:'Ext.grid.Panel',
alias : 'widget.rightpanel',
selModel : selectionModel,
store : 'addtaskstore',
id : 'rightpanel',
columnLines : true,
width:724,
selType: 'cellmodel',
plugins: [
Ext.create('Ext.grid.plugin.CellEditing', {
clicksToEdit: 1,
pluginId:'rightPanelEditor'
})
],
此侦听器用于侦听单击每个单元格并捕获该单元格中的旧值以支持我的逻辑
listeners:{
cellclick:function(thisObj, td, cellIndex, record, tr, rowIndex, e, eOpts)
{
var dataIndex = thisObj.getHeaderCt().getHeaderAtIndex(cellIndex).dataIndex;
if(eval(record.get(dataIndex))< 12) //changes made after main logic
{
oldValue = record.get(dataIndex);
}
currentRecord = record;
}
},
title:'TIMESHEET',
columns: [
{
header: 'Tasks',
dataIndex: 'task_name',
width: 160
},
{
header: 'Project Name',
dataIndex: 'project_name',
width: 160
},
{
dataIndex: 'monday',
width: 95,
id:'monday',
editor:{
xtype:'textfield',
listeners:{
'blur':function(o, t, h){
if(validateEffort(o)){
calculateTotal(o.value);
}
}
}
}
},
{
dataIndex: 'tuesday',
width: 95,
id:'tuesday',
editor:{
xtype:'textfield',
listeners:{
'blur':function(o, t, h){
if(validateEffort(o)){
calculateTotal(o.value);
}
}
}
}
},
{
dataIndex: 'wednesday',
width: 95,
id:'wednesday',
editor:{
xtype:'textfield',
listeners:{
'blur':function(o, t, h){
if(validateEffort(o)){
calculateTotal(o.value);
}
}
}
}
},
{
dataIndex: 'thursday',
width: 95,
id:'thursday',
editor:{
xtype:'textfield',
listeners:{
'blur':function(o, t, h){
if(validateEffort(o)){
calculateTotal(o.value);
}
}
}
}
},
{
dataIndex: 'friday',
width: 95,
id:'friday',
editor:{
xtype:'textfield',
listeners:{
'blur':function(o, t, h){
if(validateEffort(o)){
calculateTotal(o.value);
}
}
}
}
},
{
dataIndex: 'saturday',
width: 95,
id:'saturday',
editor:{
xtype:'textfield',
listeners:{
'blur':function(o, t, h){
if(validateEffort(o)){
calculateTotal(o.value);
}
}
}
}
},
{
dataIndex: 'sunday',
width: 95,
id:'sunday',
editor:{
xtype:'textfield',
listeners:{
'blur':function(o, t, h){
if(validateEffort(o)){
calculateTotal(o.value);
}
}
}
}
},
{
header: 'Total Efforts',
dataIndex: 'total_efforts',
width: 95,
editor:{
xtype:'textfield',
disabled:true
}
}
],
initComponent: function() {
this.callParent(arguments);
}
});
此函数用于验证在单元格单击时输入的单元格中的数字格式(如 2.34)
function validateEffort(obj){
var regEx=/(^([0-9]|[0-1][0-9]|[2][0-3]).([0-5][0-9])$)|(^([0-9]|[1][0-2])$)/;
if(obj && !regEx.test(obj.value)){
alert("Invalid value");
obj.setValue(oldValue);
return false;
}
return true;
}
此函数用于计算要在我的列中显示的总工作量(及时),数据索引:'total_efforts'。
function calculateTotal(newValue){
//alert("old = "+oldValue + " new = " +newValue);
oldValue = oldValue?oldValue:0.00;
if(currentRecord && oldValue !=newValue){
var currTotal = currentRecord.get('total_efforts');
//alert("currTotal=="+currTotal);
if(!currTotal || currTotal == 'NaN'){
currTotal = 0.00;
}
currentRecord.set('total_efforts',((eval(currTotal)+eval(newValue)-eval(oldValue))).toFixed(2));
var newcurrTotal = currentRecord.get('total_efforts');
var arr = [];
arr=newcurrTotal.split(".");
//alert("arr[1]--> " +arr[1]);
//alert(newcurrTotal);
if(eval(arr[1])>=60)
{
var q =parseInt(eval(arr[1])/60);
//alert("q --> "+parseInt(q));
var r = (eval(arr[1])%60)/100;
//alert("r --> "+r);
var newtotal = eval(newcurrTotal)+eval(q)-(eval(arr[1])/100)+r;
alert("new---> "+newtotal.toFixed(2));
//currentRecord.set('total_efforts',newtotal.toFixed(2));
}
//alert("new total=="+currentRecord.get('total_efforts'));
}
}