ZF2 jQuery datepickers无法在ajax对话框中工作

时间:2014-03-06 12:03:03

标签: javascript php jquery zend-framework2

我的zend框架2 Web应用程序上的一些操作通过对话框打开。我在处理使用ajax:

调用的动作时使用此方法
/**
 * Display content only on ajax call.
 * @param \Zend\Mvc\MvcEvent $e
 */
public function onDispatch(\Zend\Mvc\MvcEvent $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的日期时间选择器似乎不起作用。因为此HTML会动态添加到页面中。

我认为解决方案可能是修改此onDispatch方法,因此它还会重新包含一些JS文件。或者,还有更好的方法?我只是认为将硬编码的JS文件添加到我的ajax.phtml文件中也可以。

但是,我想再次知道是否存在更好的方法,比如重新加载页面上的j或其他东西。

1 个答案:

答案 0 :(得分:0)

是的,一种方法是将脚本添加到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);
        });
    }
});