2010-07-12 65 views
1

如何将您自己的JavaScript添加到由Doctrine生成的表单中?如何在表单中使用JavaScript?

例如,我可以在由symfony生成的输入表单中添加脚本onFocus?

编辑:

@Benoit:

我已经试过你的方法,但是,这是行不通的。

我的功能renderJavascript:

public function renderJavascript() { 
    $(function() { 
    $('.form').focus(function(){this.blur()}); 
}); 

而且我覆盖的方法呈现为你告诉我,但没有任何错误,但它什么都不做。

我认为这是一个小错误,但我从symfony开始,我不明白所有的形式。

回答

1

你可以通过HTML属性窗体上的渲染方法:

<?php echo $form["field_name"]->render(array("onfocus" => "alert('focused!');")) ?> 

您还可以设置的选项数组中的“类”的属性和使用jQuery JavaScript添加到现场。

1

你应该扩展你的窗体类(应该已经从sfForm派生)来覆盖render方法。

从symfony 1.4开始,sfForm类没有renderJavascript方法。我们通常使用我们所有的形式和部件一个巴塞类,将定义此方法并覆盖渲染方法

class abstractOurForm extends sfFormDoctrine 
{ 
    public function render($attributes = array()) 
    { 
     return parent::render($attributes). 
       '<script type="text/javascript">'.$this->renderJavascript().'</script>'; 
    } 
    public function renderJavascript() 
    { 
     //nothing here 
    } 
} 

这会在你的表格的末尾添加JavaScript代码(如果显示等产生的人与echo $form

当你重写主义的形式来实现的JavaScript functionnality紧到HTML表单(在线验证,AJAX集成,动态控制等)只是做这样的事情:

class myWhateverForm extends abstractOurForm 
{ 
    public function configure() 
    { 
     //your widget & validators config here 
    } 
    public function renderJavascript() 
    { 
     //here come the JS code 
     $js = <<<EOT 
      //example with jquery 
      $(function() { 
       $('#myElement').focus(function(){ 
        if (window.console) console.log('you\'ve done it'); 
       }); 
      }); 

    EOT; 
     return $js; 
    } 
} 

同样的模式是应用于我们的小部件,所以如果一些JavaScript代码是特定于小部件的话,它不必在使用它的每个表单类上重复。

希望这会帮助你!

+0

在我的形式我怎么能使用myClassForm定义的renderJavascript? – Elorfin 2010-07-23 08:40:56

+0

你可以重写渲染方法(如果你使用“echo $ form或者生成的crud”),或者你可以在你的模板中直接调用renderJavascript(如果你在模板中手动编写HTML) – Benoit 2010-07-26 08:01:31

0

这样做的正确方法是创建一个单独的.js文件并将其直接包含在您的视图中,因此它仍然遵循MVC模式。

jQuery可以抓住你的表单字段,因为表单框架为每个字段提供了一个唯一的ID,jQuery可以在你的.js文件中使用它来设置.focus或任何你想要的。

保持清洁,易于维护您的应用程序的每一层:)

相关问题