Catalyst Web应用程序设计问题与模板实现有关

时间:2011-03-24 17:00:22

标签: perl catalyst

我刚刚开始使用Catalyst,我仍然试图绕过它,所以请耐心等待。

我必须生成一个表(HTML),其中包含指向特定数据库记录的链接。记录跨越许多数据库表。此表(HTML)应该像已定义的包装器模板中的菜单一样。单击此“菜单表”的元素应加载包含“菜单表”的页面以及其下方的所选记录内容(用于查看或作为编辑表单)。

我的想法是使用链式动作/方法来制作内容(足够直接)。然后使用单个模板(模板工具包)来确定我们是仅显示'菜单表,'菜单表'和所选记录的视图,还是'菜单表'和用于编辑所选记录的表单。因此,例如,模板将始终生成“菜单表”,但取决于它是否由FormFu操作/方法使用,它可能会也可能不会生成用于编辑所选记录的表单。因此模板将具有用于显示或编辑记录的条件代码。

几乎感觉需要模板类型解决方案中的模板。有催化剂经验的人可以解决一些问题吗?也许评论我是否朝着正确的方向前进?

提前致谢。

2 个答案:

答案 0 :(得分:1)

如果您在进行服务器调用时(而不是在客户端)知道对象的状态,那么您应该能够使用模板工具包中提供的标准IF和BLOCK语句来解决此问题。 BLOCK将为您提供模板中的模板(带变量),IF-ELSE-END也可用。请参阅此处的文档:

http://template-toolkit.org/docs/manual/Directives.html

然而,如果你只知道客户端,那么Mugen在评论中是正确的,如果我在短时间线上编写类似这样的东西,我会写ajax页面,然后我会使用jQuery clone对模板div在进行ajax调用之后,填写数据并相对快速地构建菜单:

http://api.jquery.com/clone/

http://api.jquery.com/jQuery.ajax/

但我不能确定所提供的规格,也没有一些代码可以看。

答案 1 :(得分:1)

正如Horus评论的那样,给出最佳答案可能取决于服务器端是否知道相关对象的状态(查看或编辑)。

不要忘记TT使您能够在现有模板中INCLUDEPROCESS另一个模板。因此,假设服务器端(以及因此TT)知道对象的状态,这样的事情应该非常简单:

WRAPPER "wrapper.tt";
PROCESS "menu.tt" IF is_menu;
SET tmpl = is_edit ? "edit" : "view";
PROCESS "$tmpl.tt";

你可以用这种方法保持干净。