Я пытаюсь очистить свой вывод html в проекте Symfony2. Меня действительно беспокоит то, что я не знаю, как экспортировать встроенный JS динамически. Например: мне нужно инициализировать JQuery Datatables, но не на каждой странице, большинство страниц имеют свои собственные встроенные js. Im ищет способ просто расширить блок twig с помощью моих js-фрагментов, которые группируются вместе и загружаются assetic из внешнего (виртуального).js файла.
Да, вам нужно использовать наследование шаблона и иметь родительский блок javascript/jquery. JQuery такой же, как javascript, поэтому вы можете включить это в один блок или иметь отдельный файл. Если вы используете переменную, передайте эту переменную в базовый раздел jquery. Для ваших разных страниц вам необходимо расширить базовый файл twig и либо добавить в блок javascript, включив родителя, либо полностью переопределив его.
базовый файл twig имеет базовую компоновку html с блоками js и css:
<!DOCTYPE html>
<html>
<head>
{% block head %}
<link rel="stylesheet" href="style.css" />
<title>{% block title %}{% endblock %} - My Webpage</title>
{% endblock %}
{% block js %}
<script src="{{ asset('js/main.js') }}"></script>
{% endblock %}
</head>
<body>
<div id="content">{% block content %}{% endblock %}</div>
<div id="footer">
{% block footer %}
© Copyright 2011 by <a href="http://domain.invalid/">you</a>.
{% endblock %}
</div>
</body>
</html>
Это унаследовано дочерней страницей
{% extends "base.html" %}
{% block title %}Index{% endblock %}
{% block js%}
{{ parent() }}
<script src="jquery.plugin.js"></script>
{% endblock %}
{% block content %}
<h1>Index</h1>
<p class="important">
Welcome on my awesome homepage.
</p>
{% endblock %}
$('.ajaxsearch').click(function() {var input = $(this).parent().find('input') etc...
и затем каким- то образом использовать сборку для загрузки этого блока через<script type="text/javascript" src="/app_dev.php/snippets.js"></script>
вместо того, чтобы иметь все это в моем источнике. Мне нравится чистый вывод :)