我常常需要对sencha问题提出建议。我想用一个表单创建一个新的记录/模型 - 这真的很好用。但是在回调中(保存记录之后)我需要新保存的记录ID - 但是数据库中已存在的ID - 以及我得到的是一个自动分配的sencha ID,如'ext-record-465'。 / p>
这里是代码:
的 MODEL:
Ext.define('aBMin.model.Ticket', {
extend : 'Ext.data.Model',
require : ['aBMin.model.Project', 'aBMin.model.Client'],
config : {
fields : [{
name : 'ticketid',
type : 'int'
}, {
name : 'clientid',
type : 'int'
}, {
name : 'projectid',
type : 'int'
}, {
name : 'subject',
type : 'string'
}, {
name : 'datecreated',
type : 'string'
}, {
name : 'datemodified',
type : 'string'
}, {
name : 'percentCompleted',
type : 'string'
}, {
name : 'ticketdesc',
type : 'string'
}, {
name : 'supportstaffid',
type : 'int'
}, {
name : 'timeestimate',
type : 'int'
}, {
name : 'eta',
type : 'date'
}, {
name : 'warrantysupport_yn',
type : 'string'
}, {
name : 'ourfault_yn',
type : 'string'
}, {
name : 'ticketstatusid',
type : 'int'
}, {
name : 'clientemailid',
type : 'int'
}, {
name : 'clientname',
type : 'string'
}, {
name : 'total',
type : 'int'
}],
idProperty : 'ticketid',
proxy : {
type : 'direct',
reader : {
type : 'json'
},
api : {
read : Ticket.readMobile,
update : Ticket.updateMobile,
create : Ticket.createMobile
}
},
associations : [{
type : 'belongsTo',
model : 'aBMin.model.Project',
primaryKey : 'projectid',
foreignKey : 'projectid',
associationKey : 'Project',
getterName : 'getProject'
}, {
type : 'belongsTo',
model : 'aBMin.model.Client',
primaryKey : 'clientid',
foreignKey : 'clientid',
associationKey : 'Client',
getterName : 'getClient'
}/*,{
type : 'belongsTo',
model : 'aBMin.model.TicketStatus',
primaryKey : 'ticketstatusid',
foreignKey : 'ticketstatusid',
associationKey : 'TicketStatus',
getterName : 'getTicketStatus'
}*/],
validations : [{
type : 'presence',
field : 'projectid'
}, {
type : 'presence',
field : 'subject',
}, {
type : 'presence',
field : 'clientid',
}, {
type : 'presence',
field : 'ticketdesc'
}, {
type : 'presence',
field : 'supportstaffid',
}, {
type : 'presence',
field : 'eta',
}, /*{
type : 'presence',
field : 'timeestimate',
}
,*/ {
type : 'presence',
field : 'ticketstatusid',
}]
}
});
CONTROLLER(创建方法):
case 'Create':
var estimatedtime = parseInt(this.getTicketViewEstymateHours().getValue()) * 60 + parseInt(this.getTicketViewEstymateMinutes().getValue());
record.set(form.getValues());
record.set('timeestimate', estimatedtime);
var validation_errors = record.validate().all;
if(!validation_errors.length) {
record.save({
success : function(record) {
if(record.get('clientemailid') != 0) glob.getEmailViewSubmitCreateTicket().setHidden(true);
Ext.getStore('Ticket').load();
Ext.getStore('TicketSF').load( {
params : {
clientid : record.get('clientid')
,filter : ''
,pagin_from : 0
,pagin_to : 10000
}
} );
getEmailViewTicketField.setValue(record.get('ticketid'));
nav.pop();
Ext.Msg.alert('MESSAGE', 'Ticket has been created.', Ext.emptyFn);
},
failure : function() {
Ext.Msg.alert('MESSAGE', 'Ticket has NOT been crated.', Ext.emptyFn);
});
}
else {
Ext.Msg.alert('MESSAGE', 'You have to fill all required fields', Ext.emptyFn);
for(itm in this.getTicketViewFieldset().getItems().items) {
this.getTicketViewFieldset().getItems().items[itm].removeCls("msg_baddatainputed");
}
for(err in validation_errors) {
for(itm in this.getTicketViewFieldset().getItems().items) {
if(this.getTicketViewFieldset().getItems().items[itm].getName() === validation_errors[err].getField()){
this.getTicketViewFieldset().getItems().items[itm].addCls("msg_baddatainputed");
}
}
}
}
break;
我试过使用record.load方法但是要加载它我需要我没有的ID ...任何想法如何刷新新创建的记录并从数据库中获取它的ID?
答案 0 :(得分:2)
服务器应返回创建的记录的数据,与读操作返回的数据相同。
如果您支持批处理操作(即一次编辑多个记录),您还应该在每个记录的数据中包含Ext在clientIdProperty
中配置的属性中生成的ID。