Jquery 如何使用Zend框架制作基于AJAX的GUI

Jquery 如何使用Zend框架制作基于AJAX的GUI,jquery,ajax,zend-framework,Jquery,Ajax,Zend Framework,我有一个使用Zend框架构建的应用程序。我决定使用JQuery而不是Dojo。我确实使用ZendX助手来处理AjaxLink和dialogContainers之类的东西。我想尝试使GUI尽可能由AJAX驱动。但我很难决定我认为什么是最好的方法。 大多数情况下,只需将“页面”加载到dialogContainer中,而不是重新加载整个页面。例如,您可以获得一个对话框,其中包含用于更改某些用户数据或类似内容的表单 起初,我返回了整个页面,但如果使用AJAX请求进行请求,它将使用不同的布局模板来避免所有

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

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

最好的方法是什么?我应该如何处理特定于检索页面的javascript?我现在在该页面的phtml文件中有了所有特定于页面的javascript

我关心的另一件事是如何跟踪在打开许多对话框容器并通过ajax填充它们时创建的资源。假设我们打开一个对话框,我们得到一个项目列表。如果我们为该特定项单击另一个模式对话框容器popsup,它将通过ajax填充。但如果主页从未重新加载,我可以看到这变得很难处理

感觉我不可能是第一个想做ajax驱动的UI的人,所以在我把自己画进一个角落之前,请给我指出正确的方向

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

$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(); 

我尝试添加其他ActionContext等,但不管怎样,所有这些都只是始终呈现正常的.phtml文件。

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

对于HTML数据:

您可以使用ActivationContext操作帮助器()。可以将AJAX上下文添加到操作中。我在控制器的init()函数中使用它

$ajaxContext = $this->_helper->getHelper('AjaxContext');
$ajaxContext->addActionContext('myaction', 'html')->initContext('html');
这样做的目的是,在调用myactionAction()时,它将检查请求是否通过AJAX调用发出。如果是,它将禁用布局,并呈现“myaction.ajax.phtml”而不是“myaction.phtml”,如果不是ajax调用的话。这样,您就可以从一个操作中获得一个干净的HTML输出,而无需任何额外的操作,您不必在每个操作中编写请求类型检查代码。我发现和他一起工作通常很容易

如果您正在加载的内容带有额外的javascript,请不要忘记将其添加到您的视图中,并对其进行响应

$this->headScript()->appendFile("/js/list.js");
echo $this->headScript(); 
然后,JavaScript会像平常一样执行

用于JSON数据

JSON操作助手在返回JSON数据的操作中非常快速且易于使用

$r = "Success"; 
$this->_helper->json($r);
这还返回纯JSON,而不返回其他内容


我想一个更具体的问题会帮助你得到更好的答案

我读过上下文,但不管我怎么努力,它都不起作用。它没有抛出错误或任何东西,它只会使用.phtml文件。不管怎么调整。可能是我忽略了一些简单的东西,但不管我读了多少书,我都找不到。你能给我们看看你的代码吗?(如果可以,请用代码更新问题)虽然我没有获得上下文来玩球,但我认为这是正确的方法,并且无论如何都会接受您的答案。在您的代码中,当您执行initContext()时,您需要使用上下文类型重载它:“initContext(“html”);在quam中,请记住将/format/xxx添加到查询的末尾,否则上下文帮助器不会激活。即使对于“普通”XHR,也需要指定/format/html