Sencha新记录id检索

时间:2013-06-24 08:41:59

标签: javascript extjs sencha-touch-2

我常常需要对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?

1 个答案:

答案 0 :(得分:2)

服务器应返回创建的记录的数据,与读操作返回的数据相同。

如果您支持批处理操作(即一次编辑多个记录),您还应该在每个记录的数据中包含Ext在clientIdProperty中配置的属性中生成的ID。