你應該擴展你的窗體類(應該已經從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