我有一个使用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文件。
答案 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而不是其他内容。
我想一个更具体的问题可以帮助你获得更好的答案。