2010-07-12 18 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或任何你想要的。

保持清潔,易於維護您的應用程序的每一層:)

相關問題