我目前正在開發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