如何使用Zend Framework制作基于AJAX的GUI

时间:2011-02-04 14:48:19

标签: jquery ajax zend-framework

我有一个使用Zend Framework构建的应用程序。我决定使用JQuery而不是Dojo。我确实使用ZendX助手来获取像ajaxLinks和dialogContainers这样的东西。我想尽可能地将GUI作为AJAX驱动。但我很难决定我认为最好的方法。 大多数情况下,将“页面”加载到dialogContainer而不是重新加载整个页面是一个问题。例如,您可以获得一个对话框,其中包含用于更改某些用户数据或类似内容的表单。

起初我返回了整个页面,但是如果它是使用AJAX请求请求它使用不同的布局模板来避免所有不引用的javascript包含等。这使我能够构建一个基本上可以像正常一样浏览的页面版本并通过AJAX。但我没有说服自己,我喜欢这个。看看Zend Server GUI,他们似乎做了这个,但没有返回json编码数据并从中构建页面。

对此最好的方法是什么?如何处理特定于已重试页面的javascript?我现在在该页面的phtml文件中拥有所有页面特定的javascript。

我关注的另一件事是如何在打开大量对话框容器并通过ajax填充它们时跟踪创建的资源。假设我们打开一个对话框,然后我们得到一个项目列表。如果我们单击该特定项目的另一个模态对话框容器弹出窗口并通过ajax填充。但如果主页永远不会重新加载,我会发现这很难处理。

感觉我不能成为第一个想做ajax驱动UI的人,所以在我把自己画成一个角落之前,请指出正确的方向。 ;)

更新:我基本上尝试了我可以在上下文主题上找到的各种教程以及Zend的文档。我想我一定错过了启用一些无证的功能或其他东西。由于它不起作用,我删除了代码,但在尝试像波纹管代码之类的东西之前,试图找到我看过的例子。

$ajaxContext = $this->_helper->getHelper('AjaxContext');
$ajaxContext->addActionContext('list', 'html')
            ->addActionContext('modify', 'html')
            ->initContext();

我尝试了类似下面的内容

$this->_helper->contextSwitch()
     ->setContext('html', array(
                 'suffix'    => 'html',
                 'headers'   => array('Content-Type' => 'text/html; Charset=UTF-8'),
)
         )
     ->addActionContext('index', array('html','xml', 'json'))
     ->setAutoJsonSerialization(true)
     ->initContext(); 

我尝试添加其他ActionContexts等,但无论它们是什么,最终都会一直呈现正常的.phtml文件。

1 个答案:

答案 0 :(得分:1)

这是我在制作ZF / Ajax应用程序时学到的内容。

适用于HTML数据:

您可以使用ActiionContext操作助手(ZF Reference)。您可以为操作添加AJAX上下文。我在控制器的init()函数中使用它。

$ajaxContext = $this->_helper->getHelper('AjaxContext');
$ajaxContext->addActionContext('myaction', 'html')->initContext('html');

这样做,当调用myactionAction()时,它将检查请求是否是通过AJAX调用发出的。如果是,则禁用布局,并呈现“myaction。 ajax .phtml”而不是“myaction.phtml”,如果它不是AJAX调用那样。这样,您可以从操作中获得干净的HTML输出,而无需额外的任何操作,您不必在每个操作中编写Request-Type检查代码。我发现它通常很容易使用。

如果您要加载的内容带有额外的javascript,请不要忘记将其添加到您的视图中并回显它。

$this->headScript()->appendFile("/js/list.js");
echo $this->headScript(); 

然后JavaScript会像往常一样执行。

对于JSON数据

JSON Action Helper在动作中非常快速且易于使用以返回JSON数据。

$r = "Success"; 
$this->_helper->json($r);

这也返回纯JSON而不是其他内容。

我想一个更具体的问题可以帮助你获得更好的答案。