現在、symfony2アプリケーションで作業しており、組み込みコントローラを使用しています。私の組み込みコントローラは、独自の機能セットをカプセル化して、どこにでも埋め込むことができ、機能することが期待されるウィジェットのようなものです。アセット付きの組み込みコントローラビュー
私はオンラインのユーザーと呼ばれるコントローラを持っています。それが生成するビューはシンプルで、オンラインユーザーのリストです。しかし、私はクリックしたユーザーの情報を取得するためにajaxを使用できるように、そのビューにいくつかのjavascriptを追加したいと思います。ここだ
{% block content %}
{% endblock content %}
{% block scripts %}{% endblock %}
:
{% 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 %}
これから延長された部分である:ここ
return $this->render('AppBundle:Users:usersOnline.html.twig', array('somedata' => $data);
は、そのコントローラのビューの:
コントローラは基本的にビューを返しコントローラを埋め込んでいるメインページ:
{% "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
ブロックに入れることができます。つまり、<script>
タグを<div>
タグ内に持つことになります。また、ユーザーインターフェイスのパフォーマンスのために、本文の最後にスクリプトを置くことをお勧めします。
エンベデッドコントローラのビューから、コントローラを埋め込んだテンプレート内の適切なブロックに適切な部分をレンダリングできるように、テンプレートをどのように構造化する必要がありますか?現在のテンプレートでは、埋め込みコントローラのHTMLマークアップの後にYUIライブラリが読み込まれるため、埋め込みコントローラ内のYUIライブラリを使用したアクセスは不可能です。
[Duplicate](http://stackoverflow.com/q/9224347/1146363)でも読みやすいですが。私は組み込みコントローラの結果を複数のブロックに分割することはできないと思います。返される結果は、レンダリングされたhtmlであり、小枝のテンプレートではありません。私は、コンテンツ用とJavaScript用の2つの組み込みコントローラーが必要だと思います。そして、場合によっては、おそらくcssのための1つです。 – Cerad
Hm。 2つのエンベデッドコントローラを持つことはアイデアよりも少なく、あまりエレガントではありません。 – F21
実際には2つのコントローラーは必要ありません。つまり、{'generate': 'html'または 'js'または 'css'}を使用して、必要なものを指定する引数を持つ同じコントローラーを2回呼び出すだけです。それに応じてテンプレートを調整します。 – Cerad