【问题标题】:How to make AJAX based GUI using Zend Framework如何使用 Zend 框架制作基于 AJAX 的 GUI
【发布时间】:2011-02-04 14:48:19
【问题描述】:

我有一个使用 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 文件。

【问题讨论】:

  • inquam,记得将 /format/xxx 添加到查询的末尾,否则上下文帮助程序不会激活。即使对于“普通”XHR,您也需要指定 /format/html

标签: jquery ajax zend-framework


【解决方案1】:

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

对于 HTML 数据:

您可以使用 ActionContext 操作助手 (ZF Reference)。您可以将 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 Action Helper 在返回 JSON 数据的操作中非常快速且易于使用。

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

这也返回纯 JSON,仅此而已。

我想一个更具体的问题会帮助您获得更好的答案。

【讨论】:

  • 我阅读了有关上下文的信息,但无论我多么努力,它都无法正常工作。它没有抛出错误或任何东西,它只会使用 .phtml 文件。不管各种微调。可能是我忽略了一些简单的东西,但无论我读了多少书,我都找不到。
  • 你能告诉我们你的代码吗? (如果可以的话,用代码更新问题)
  • 虽然我没有获得打球的背景,但我认为这是正确的方法,无论如何都会接受你的回答。
  • 在你的代码中,当你做initContext()时,你需要用上下文类型重载它:"initContext("html")";
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多