当服务器端设置 id 时,工作流程是这样的:
- 在未分配 ID 的情况下添加到商店的记录。
- 存储同步,因此创建请求被发送到服务器。
- 服务器返回已发送的记录,并设置了 id 属性。
- ExtJS 查看返回的记录,如果设置了 id,则将其分配给记录。
顺便注意一下,对于所有 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);
},