如果我在ExtJs 4下有商店,如何在同步发生后从新添加的记录中获取ID?
例如,如果我将PersonStore
设置为自动同步,并且我根据用户填写的表单添加新人,我可以通过执行以下操作将新记录添加到商店;
var values = button.up('form').getForm().getValues(),
store = Ext.StoreMgr.lookup('PersonStore'),
result;
result = store.add(values);
由于autosync设置为true,因此将新值发送到后端,在后端为其分配id。然后,后端使用新创建的记录的id响应客户端。
如何在客户端代码中获取此新创建记录的ID?我假设结果将包含它,但结果仍将id设置为null。
答案 0 :(得分:8)
当服务器端设置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);
},