你应该扩展你的窗体类(应该已经从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代码是特定于小部件的话,它不必在使用它的每个表单类上重复。
希望这会帮助你!
在我的形式我怎么能使用myClassForm定义的renderJavascript? – Elorfin 2010-07-23 08:40:56
你可以重写渲染方法(如果你使用“echo $ form或者生成的crud”),或者你可以在你的模板中直接调用renderJavascript(如果你在模板中手动编写HTML) – Benoit 2010-07-26 08:01:31