2010-02-13 22 views
4

在我的组件可以调用sfResponse :: addJavascript()之前,我的layout.php调用了include_javascripts()。有没有“帮手”或“最佳做法”来解决这个问题?组件应该如何在Symfony中添加JavaScript和CSS

我必须分离调用sfResponse :: addJavascript()吗?我很乐意避免它。

这里北京时间我实际的解决方法:

<head> 
    <?php $nav = get_component('nav', 'nav') /* Please show me a better way. */ ?> 
    <?php include_javascripts() ?> 
    ... 
</head> 
<body> 
    <?php /* include_component('nav', 'nav') */ ?> 
    <?php echo $nav ?> 
    ... 
</body> 

感谢

回答

3

如果组件总是使用只是移动你的JavaScript纳入布局的呈现在您的应用view.yml:

default: 
    javascripts: [my_js] 

当总是使用JS调用时,没有必要分开JS调用。

UPDATE:

如果必须保持JS包容你可以放置在一个插槽您的组件调用你的include_javascripts()通话将其添加到堆栈前的组件被渲染,然后包括槽在适当的地方:

<?php slot('nav') ?> 
<?php include_component('nav', 'nav'); ?> 
<?php end_slot(); ?> 
<html> 
    <head> 
    <?php include_javascripts() ?> 
    ... 
    </head> 
    <body> 
    <?php include_slot('nav'); ?> 
    <?php echo $nav ?> 
    ... 
    </body> 
</html> 
+0

当我删除组件,我不得不强调我的大脑清理view.yml?如果我记得,如果我没有依赖关系? – koalabruder 2010-02-15 21:55:35

+0

@koalabruder:是的,你必须记得删除JS。如果您真的*必须在组件文件中包含JS,那么您需要将组件包含物移动到插槽中。我已经用细节更新了我的答案。 – nortron 2010-02-16 05:13:04

0

您可能需要禁用sfCommonFiter现在是deprecated。通用过滤器会自动将css/js添加到布局中。

一旦你做到了这一点,你可以移动使用include_javascripts拨打任何地方layout.php中文件中,下面的include_component('nav', 'nav')电话

+1

这对CSS不会工作,为'include_css 'body'内部不允许使用'''link''标签。我想'sfCommonFilter'与这个问题没什么关系。实际上,我想它是使用这个过滤器,就像在模板渲染后通过这个过滤器**添加的链接和脚本标记。但它可能与'include_javascripts'一起工作。 – 2010-02-13 12:47:35

11

来源:http://www.symfony-project.org/book/1_2/07-Inside-the-View-Layer

文件包含CONFI guration

//在view.yml文件

indexSuccess: 
    stylesheets: [mystyle1, mystyle2] 
    javascripts: [myscript] 

//在动作

$this->getResponse()->addStylesheet('mystyle1'); 
$this->getResponse()->addStylesheet('mystyle2'); 
$this->getResponse()->addJavascript('myscript'); 

//在模板

<?php use_stylesheet('mystyle1') ?> 
<?php use_stylesheet('mystyle2') ?> 
<?php use_javascript('myscript') ?> 
相关问题