0

在我的一个页面上,我试图从不同的控制器获取另一个页面的内容,然后获取该 HTML 并使用它在第一页上制作一个小“小部件”。

如果我抓住当前页面,我可以这样做:

my $html = $c->response->body();

但由于它在另一个控制器中,我不知道如何得到它。

一个额外的(潜在的)复杂情况是,有问题的操作需要一个 arg 传递给它。

我试过my $html = $c->visit('/action/')->body();- 在黑暗中拍摄 - 我在最近的另一篇文章中对其进行了故障排除。但这似乎只是接管了当前的行动,而不是让我只是从中获取响应。

我唯一能想到的(这是未经测试的)是存储第 1 页的响应,执行 my $c->visit,存储该响应,然后获取第 1 页的原始响应并在最后输出该响应。似乎过于复杂,但这是我能想到的最好的。

有任何想法吗?

4

2 回答 2

2

我在看到这个之前回答了你的另一个问题。我怀疑,我回答的后半部分在这里是密切相关的。

在我看来,/assets/widget 中的逻辑需要位于模型中而不是控制器中,以便它可以被任何需要它的功能使用。

和/或您需要将模板分解为(可重用)组件,以便您计划嵌入的任何内容都可以作为单个渲染过程的一部分完成。

[%- IF foo;
        PROCESS widget.tt;
    END; -%]

或者你对你的小部件进行不同的建模,这样你就可以使用 AJAX 方法生成它们,而不是让它们成为你的主页渲染的一部分,这样每个小部件都会对你的应用程序进行自己的调用,获取一些 JSON,并呈现自己(可能通过jQuery - 一个例子超出了问题的范围)。

希望有帮助。

于 2013-02-19T04:50:24.073 回答
1

Catalyst::Plugin::SubRequest可能会满足您的需求。正如 RET 所说,稍微重构您的应用程序可能更谨慎,但在某些情况下,渲染子请求可能很有用

于 2013-02-19T08:37:23.937 回答