我目前正在开发symfony2应用程序并使用嵌入式控制器。我的嵌入式控制器就像小部件一样,它应该封装自己的一套功能,并且可以嵌入到任何地方,并且仍然可以运行。带资产的嵌入式控制器视图
我有一个控制器在线调用用户。它生成的视图很简单,只是一个在线用户列表。但是,我想向该视图添加一些JavaScript,以便我可以使用ajax检索单击用户的信息。
控制器基本上返回一个视图:
return $this->render('AppBundle:Users:usersOnline.html.twig', array('somedata' => $data);
下面是该控制器的视图:
{% extends partial.html.twig" %}
{% block content %}
<ul>
<li><a href="site.com/ajax/user/1">User 1</a></li> (this would all be generated using 'somedata')
<li><a href="site.com/ajax/user/2">User 2</a></li>
....
<ul>
{% endblock content %}
{% block scripts %}
..some javascript for interacting with this widget
{% endblock %}
这是从延伸部分:
{% block content %}
{% endblock content %}
{% block scripts %}{% endblock %}
这里的嵌入控制器的主页面:
{% "base.html.twig" %}
{% block title %}Main{% endblock %}
{% block content %}
..some markup here
<div id="usersonline">
{% render "AppBundle:Users:usersOnline" with {'max': 4} %}
</div>
{% endblock %}
{% block scripts %}
..some javascript
{% endblock %}
这是,它的延伸基:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>{% block title %}{% endblock %} - App</title>
...Some stylesheets
</head>
<body>
{% block content %}{% endblock %}
<script src="http://yui.yahooapis.com/3.5.0pr2/build/yui/yui-min.js"></script>
{% block scripts %}{% endblock %}
</body>
</html>
我现在面临的问题是从包括嵌入式控制器的JavaScript。在我的情况下,视图部分扩展并在插入主页之前完全呈现为1个单元。在这种情况下,我只能将我的javascript放在content
块中,这意味着我将在<div>
标签内有<script>
标签。我还希望在用户界面性能的主体末尾有脚本。
我应该如何构建我的模板(或甚至可能),以便可以将嵌入控制器的模板中适当的块从嵌入式控制器的视图中渲染为适当的块?在我当前的模板中,YUI库将在嵌入式控制器呈现的HTML标记之后加载,因此在嵌入式控制器内使用YUI库是不可能的。
[Duplicate](http://stackoverflow.com/q/9224347/1146363)虽然更易于阅读。我不认为嵌入式控制器的结果可以在多个块之间分配。返回的结果只是呈现的html而不是树枝模板。我认为你需要两个嵌入式控制器,一个用于内容,另一个用于JavaScript。在某些情况下,甚至可能只有一个用于CSS。 – Cerad 2012-02-11 14:17:39
嗯。拥有2个嵌入式控制器不太理想,而且不是很优雅的imo。 – F21 2012-02-12 04:13:14
那么你实际上并不需要两个控制器,只需要两个调用同一个控制器的参数,该参数指定你想要的内容,即{'generate':'html'或'js'或'css'}。然后相应地调整你的模板。 – Cerad 2012-02-12 13:10:03