我的Zend Framework 2 Web应用程序通过对话框打开了一些操作。我在处理用Ajax调用的操作时使用此方法:
/**
* Display content only on ajax call.
* @param ZendMvcMvcEvent $e
*/
public function onDispatch(ZendMvcMvcEvent $e)
{
$app = $e->getParam('application');
$layout = $app->getMvcEvent()->getViewModel();
if($app->getRequest()->isXmlHttpRequest()) {
$controller = $e->getTarget();
$controller->layout('application/ajax/ajax');
$layout->setTerminal(true);
}
}
问题在于,JQuery的DateTime选择器似乎不起作用。因为此HTML动态添加到页面。
我认为解决方案可能是修改此onDispatch
方法,因此它还重新包含一些JS文件。或者,还有更好的方法?我只是以为将硬编码的JS文件添加到我的ajax.phtml
文件中也可以。
但是,再次,我想知道是否存在更好的方法,例如重新加载页面上的JS或其他内容。
是的,一种方法是将脚本添加到您的ajax.phtml中。
我前一段时间做的事情是将所需的脚本作为响应标头发送:
$requiredScripts = array(
'/some/js/file.js',
'/another/js/file.js'
);
$this->getResponse()->getHeaders()
->addHeaderLine('x-scripts: ' . json_encode($requiredScripts));
然后在您的JS中:
// globally listen for the ajax-requests
$(document).ajaxSuccess(function(res, status, xhr) {
var requiredScripts = xhr.getResponseHeader("x-scripts");
if (requiredScripts) {
jQuery.each(requiredScripts, function(index, scriptSrc) {
jQuery.getScript(scriptSrc);
});
}
});