當服務器側是一個設置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);
},
您好再次:)我想我是在我的問題不清楚,所以我已經更新以澄清。服務器正確地返回新創建的ID,但是在客戶端如何檢索新創建的ID? – 2012-08-08 17:50:12
這是自動發生的,因爲有幾件事情是滿意的。你能否提供發送給服務器的請求和服務器響應?我認爲你沒有使用idProperty,並且id字段是'id'。 – Izhaki 2012-08-08 19:01:01
等一下。你的意思是像aRecord.get(「id」)?你可以聽商店寫事件,並檢查'aOperation.response.result' – Izhaki 2012-08-08 19:03:23