在ExtJS的,我怎么记录同步到商店后获得一个ID?(In ExtJs, how do I get

2019-09-21 00:49发布

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

Answer 1:

当服务器端是一个设置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);

},


文章来源: In ExtJs, how do I get an id after syncing a record to the store?