2016-06-22 11 views
0

Drupal內置了這個ajax框架。所以,我可以寫帶命令的回調函數像Drupal文件模塊中的DOM發生了什麼ajax upload

$commands = array(); 
$commands[] = ajax_command_replace(NULL, theme('status_messages')); 
return array('#type' => 'ajax', '#commands' => $commands); 

輸出則得到由Drupal的Ajax框架以某種方式最終manupulate的DOM處理。正如上面的函數_replace,它根據某些包裝器ID來替換DOM中的某些東西。

以上代碼來自Drupal附帶的file模塊。上傳新文件時,表單將被更新以指示插入表單中的新文件。

正如該文件說,第一個參數可能是NULL它可能是selector。我特別感興趣的是知道這個file模塊如何計算出包裝器ID,以便它可以插入DOM元素作爲最終結果。

回答

0

取自drupal文檔頁面。

如果該命令是對來自#ajax表單元素的請求的響應,則該值可以爲NULL。

在file_managed_file_process函數中,您具有upload_button表單元素,該元素將ajax請求發送到'file/ajax/...'路徑。

ajax_command_replace用於file_ajax_upload()中的ajax回調。所以請求來自upload_button表單元素,在這種情況下,您可以使用NULL而不是選擇器。

+0

那麼Drupal如何知道要替換爲「選擇器」?觸發器按鈕元素的包裝元素?看起來整個文件字段被替換。所以這是一個完整的兒童形式? – Hao

+0

它應該替換$ ajax_settings ['wrapper']中指定的包裝器 – Zolyboy