gpt4 book ai didi

extjs - 在 ExtJs 中,如何在将记录同步到商店后获取 ID?

转载 作者:行者123 更新时间:2023-12-01 15:32:07 25 4
gpt4 key购买 nike

如果我在 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。

最佳答案

当服务器端设置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,
);
}

然后在您的应用程序中,您的 Controller 应该 Hook 存储写入事件。像这样:

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);

},

关于extjs - 在 ExtJs 中,如何在将记录同步到商店后获取 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11868117/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com