如果我有ExtJS的4下一个店,我如何得到发生同步后,新添加的记录的ID?
举例来说,如果我有一个PersonStore
设置为自动同步和我添加一个基于由用户填写表单上一个新的人,我可以通过以下操作添加新记录到店;
var values = button.up('form').getForm().getValues(),
store = Ext.StoreMgr.lookup('PersonStore'),
result;
result = store.add(values);
由于自动同步设置为true,这将在新的价值,它被分配一个ID后端。 后端然后响应与新创建的记录的ID的客户端。
我如何获得的ID在我的客户端代码这个新创建的记录? 我曾以为,结果将包含它,但结果仍具有ID设置为NULL。
当服务器端是一个设置id,工作流程是这样的:
- 记录添加到存储区而不被分配一个ID。
- 商店同步,所以创建请求被发送到服务器。
- 服务器返回的发送记录,用一个id属性集。
- ExtJS的着眼于返回的记录,如果它有一个id集,它assignes的记录。
请注意,顺便说一下,对于所有的CRUD操作,则存储记录将被从服务器这么长时间的ID相匹配返回的数据更新。 在新创建的记录的情况下,ExtJS的有internalId机制来确定返回的记录是发送,而是设置了ID。
服务器端代码可能是这个样子:
function Create( $aRecord )
{
global $pdo;
$iInsertClause = InsertClause::FromFields( self::$persistents );
$iStatement = $pdo->prepare( "INSERT INTO Tags $iInsertClause" );
$iStatement->execute( InsertClause::ObjectToParams( $aRecord, self::$persistents ) );
// Inject the id into the record and return it in the reader's root,
// so client side record updates with the new id.
$aRecord->id = $pdo->lastInsertId();
return array(
'success' => true,
'data' => $aRecord,
);
}
那么你的应用程序中,您的控制器应勾上存储器写入事件。 事情是这样的:
init: function() {
this.getTasksStore().on({
write: this.onStoreWrite,
scope: this
});
},
这功能可以检查返回的记录中(我假设data
是读者的根):
onStoreWrite: function ( aStore, aOperation )
{
var iRecord = aOperation.response.result.data;
console.log(iRecord.id);
},